我也是95分,但是我是时间超限,而且是pascal语言,如果是用C++我应该就过了
by 洛阳 @ 2016-11-28 20:37:51
pascal不是比c++快吗?
by 何奕锐 @ 2016-12-02 16:45:10
不要用cin cout
scanf printf要快一点
by Willem @ 2016-12-03 14:23:11
不是时间问题,我测了一下,把数组开大一点就行了
by Phykyer @ 2016-12-09 17:59:40
```cpp
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
using namespace std;
int n, m;
int val[40010], num[15010];
int a[15010], b[15010], c[15010], d[15010];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i ++){
scanf("%d", &val[i]);
num[val[i]] ++;
}
for(int i = 1; i*9+1 <= n; i ++){
int sum = 0;
for(int j = i*9+2; j <= n; j ++){
sum += num[j-7*i-1] * num[j-9*i-1];
c[j-i] += num[j] * sum;
d[j] += num[j-i] * sum;
}
sum = 0;
for(int j = n-i*9-1; j >= 1; j --){
sum += num[j+i*9+1] * num[j+i*8+1];
a[j] += num[j+2*i] * sum;
b[j+2*i] += num[j] * sum;
}
}
for(int i = 1; i <= m; i ++){
printf("%d %d %d %d\n", a[val[i]], b[val[i]], c[val[i]], d[val[i]]);
}
return 0;
}
```
by Phykyer @ 2016-12-09 18:01:38
揍是这样,加一个零就好~
by Phykyer @ 2016-12-09 18:02:38
等一下,我好像发错了什么
by Phykyer @ 2016-12-09 18:08:02
```cpp
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
using namespace std;
int n, m;
int val[40010], num[15010];
int a[15010], b[15010], c[15010], d[15010];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i ++){
scanf("%d", &val[i]);
num[val[i]] ++;
}
for(int i = 1; i*9+1 <= n; i ++){
int sum = 0;
for(int j = i*9+2; j <= n; j ++){
sum += num[j-7*i-1] * num[j-9*i-1];
c[j-i] += num[j] * sum;
d[j] += num[j-i] * sum;
}
sum = 0;
for(int j = n-i*9-1; j >= 1; j --){
sum += num[j+i*9+1] * num[j+i*8+1];
a[j] += num[j+2*i] * sum;
b[j+2*i] += num[j] * sum;
}
}
for(int i = 1; i <= m; i ++){
printf("%d %d %d %d\n", a[val[i]], b[val[i]], c[val[i]], d[val[i]]);
}
return 0;
}
```
by Phykyer @ 2016-12-09 18:08:40
```cpp
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cstdio>
#include <vector>
#include <cmath>
#include <string>
#include <cstdlib>
using namespace std;
const int MAXN=150000,MAXM=400000;
int sum[MAXN];
int w[MAXM];
int ans[4][MAXM];//0->a,1->b,2->c,3->d
int main()
{
int n,m;
cin>>n>>m;
memset(sum,0,sizeof(sum));
memset(ans,0,sizeof(ans));
for(int i=1;i<=m;i++)
{
cin>>w[i];
sum[w[i]]++;
}
for(int x=1;x<=n/9;x++)
{
int CDnum=0;//c*d
for(int a=n-(x*9)+1;a>=0;a--)
{
int C=a+(x*8)+1;
CDnum+=sum[C]*sum[C+x];
ans[0][a]+=sum[a+(x*2)]*CDnum;
ans[1][a+(x*2)]+=sum[a]*CDnum;
}
int ABnum=0;//a*b
for(int c=8*x+1;c<=n;c++)
{
int B=c-(6*x)-1;
ABnum+=sum[B]*sum[B-(2*x)];
ans[2][c]+=sum[c+x]*ABnum;
ans[3][c+x]+=sum[c]*ABnum;
}
}
for(int i=1;i<=m;i++)
{
cout<<ans[0][w[i]]<<' '<<ans[1][w[i]]<<' '<<ans[2][w[i]]<<' '<<ans[3][w[i]]<<endl;
}
}
```
by Phykyer @ 2016-12-09 18:09:22
终于对了~
汗啊~
by Phykyer @ 2016-12-09 18:10:16