/in/foo.cc: In function 'int main()':
/in/foo.cc:5:258: error: expected '}' at end of input
struct node{ int x,id; bool operator < (const node& p)const{return x<p.x;}}c[2005],d[2005];int a[2005],b[2005],ans,cnt[2005];int main(){ int n,c1,c2,c3; scanf("%d%d%d%d",&n,&c1,&c2,&c3); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]); c[i].id=d[i].id=i;//存编号 c[i].x=b[i]; d[i].x=a[i]*c1+b[i]*c2-c3; } sort(c+1,c+1+n); sort(d+1,d+1+n); for(int i=1;i<=n;i++)//枚举A0 { int k=0,sum=0; memset(cnt,0,sizeof cnt);//cnt用来记录该甜度被计算了几次 for(int j=1;j<=n;j++)//枚举c[j](B0) { //因为c[j]递增,所以前面能够满足限制的d值在c[j]增加后仍然满足,所以不必再从1到n把d验证一遍,从而达到优化 while(k<=n&&d[k].x<=a[i]*c1+c[j].x*c2)//如果d[k]满足限制 {//这个while在j从1到n中只会执行n次,大大小于n^2 if(a[d[k].id]>=a[i]&&b[d[k].id]>=c[j].x)//看d[k]原来的a,b是否大于等于最小值 { sum++;//选一个梨子 cnt[b[d[k].id]]++;//此b值算了一次 } k++; } sum-=cnt[c[j-1].x];//减去b值已经小于最小值的梨子,因为c排过序,所以减去c[j-1]足矣 cnt[c[j-1].x]=0;//如果c[j]==c[j-1]可能会重复减 ans=max(ans,sum);//保存可以选的最大梨子数 } } printf("%d",ans);}
^
/in/foo.cc:5:258: error: expected '}' at end of input