请求神犇支援!!!0分

P2119 [NOIP2016 普及组] 魔法阵

神犇快来!!!
by wuyou03 @ 2017-09-04 13:29:44


你也不说这是哪道题
by zzzty___ @ 2017-09-04 16:38:33


magic
by huzhaoyang @ 2017-09-04 16:57:20


我不是神犇
by yttt @ 2017-09-05 09:57:23


@[yetao](/space/show?uid=33705) 帮帮忙吧!!!
by wuyou03 @ 2017-09-05 13:18:42


@[左犊子](/space/show?uid=50787) magic 就这道题啊
by wuyou03 @ 2017-09-05 13:19:54


额不写结构体也没事吧,看得**眼
by Jigsaw_Killer @ 2017-09-06 23:22:52


```cpp #include <iostream> #include <cstdio> #include <algorithm> using namespace std; long long n,c[45678][4],m,t,o,l,r,wf,e,mid,p,d[45678][4]; long long c1=0,c2=0,c3=0,c0=0,temp,f[20000],temp2; struct data {long long num,x;}; data a[45678]; struct data2 {long long b,e,x,c;}; data2 b[45678]; int comp(data a,data b) {return a.x<b.x;} int main() { cin>>m>>n; for (int i=1;i<=n;i++) {scanf("%lld",&a[i].x);a[i].num=i;} sort(a+1,a+n+1,comp);b[0].x=-1000; for (int i=1;i<=n;i++) if (b[t].x!=a[i].x) {t++;b[t].b=i;b[t].e=i+1;b[t].x=a[i].x;b[t].c=1;} else {b[t].e++; b[t].c++;} for (int i=1;i<=m;i++) { l=1;r=t;mid=((l+r)>>1); while(1) { if (b[mid].x==i) {e=1;break;} if (l>r) break; if (b[mid].x>i) r=mid-1; if (b[mid].x<i) l=mid+1; mid=((l+r)>>1); } if (e){f[i]=mid;e=0;} } for (int i=1;i<=t;i++) for (int j=i+1;j<=t;j++) {temp=b[j].x-b[i].x;if(temp%2==0) for (int k=t;k>j;k--) if (temp*3<b[k].x-b[j].x) { wf=temp+(b[k].x<<1); if(wf%2) continue; else wf=(wf>>1); if (wf>m) continue; else if(f[wf]>0) { mid=f[wf]; o=(b[i].c)*(b[j].c)*(b[k].c)*(b[mid].c); c[b[i].b][0]+=o/b[i].c; c[b[j].b][1]+=o/b[j].c; c[b[k].b][2]+=o/b[k].c; c[b[mid].b][3]+=o/b[mid].c; c[b[i].e][0]-=o/b[i].c; c[b[j].e][1]-=o/b[j].c; c[b[k].e][2]-=o/b[k].c; c[b[mid].e][3]-=o/b[mid].c; } }else break;} for (int i=1;i<=n;i++) {c0+=c[i][0];c1+=c[i][1];c2+=c[i][2];c3+=c[i][3];temp=a[i].num; d[temp][0]=c0;d[temp][1]=c1;d[temp][2]=c2;d[temp][3]=c3;} for (int i=1;i<=n;i++) printf("%lld %lld %lld %lld\n",d[i][0],d[i][1],d[i][2],d[i][3]); return 0; } 三重80分,偷笑 ```
by command_block @ 2017-09-23 19:34:29


```cpp #include<iostream> #include<cstdio> using namespace std; int n,m,k[40040],w[15050],a[15050],b[15050],c[15050],d[15050]; int main(){ cin>>n>>m; for(int i=1;i<=m;++i){ scanf("%d",&k[i]); w[k[i]]++; } for(int i=1;9*i<n;++i){ int s=0; for(int xd=9*i+2;xd<=n;++xd){ s+=w[xd-9*i-1]*w[xd-7*i-1]; d[xd]+=w[xd-i]*s; c[xd-i]+=w[xd]*s; } s=0; for(int xa=n-9*i-1;xa>=1;--xa){ s+=w[xa+9*i+1]*w[xa+8*i+1]; a[xa]+=w[xa+2*i]*s; b[xa+2*i]+=w[xa]*s; } } for(int i=1;i<=m;++i) printf("%d %d %d %d\n",a[k[i]],b[k[i]],c[k[i]],d[k[i]]); } AC代码 ```
by 神犇的蒟蒻 @ 2017-09-25 23:04:33


```cpp #include<bits/stdc++.h> using namespace std; int n,m,k[40040],w[15050],a[15050],b[15050],c[15050],d[15050]; int main(){ cin>>n>>m; for(int i=1;i<=m;++i){ scanf("%d",&k[i]); w[k[i]]++; } for(int i=1;9*i<n;++i){ int s=0; for(int xd=9*i+2;xd<=n;++xd){ s+=w[xd-9*i-1]*w[xd-7*i-1]; d[xd]+=w[xd-i]*s; c[xd-i]+=w[xd]*s; } s=0; for(int xa=n-9*i-1;xa>=1;--xa){ s+=w[xa+9*i+1]*w[xa+8*i+1]; a[xa]+=w[xa+2*i]*s; b[xa+2*i]+=w[xa]*s; } } for(int i=1;i<=m;++i) printf("%d %d %d %d\n",a[k[i]],b[k[i]],c[k[i]],d[k[i]]); } ```
by 肖焕成 @ 2017-10-24 21:30:13


|