95分求助各位大神

P2119 [NOIP2016 普及组] 魔法阵

我也是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


| 下一页