C++ 代码错误分析:排序数组起始下标问题
#include<bits/stdc++.h>\nusing namespace std;\ntypedef long long ll;\nconst int nn=2e5+10;\nll n,m;\nll A[nn],B[nn],C[nn];\nll ida,idb,idc;\nbool cmp(ll a,ll b){\n\treturn a>b;\n}\nvoid solve(){\n\tcin>>n>>m;\n\tida++,idb++,idc++;\n\tfor(int i=1;i<=n;i++){\n\t\tll t,x;cin>>t>>x;\n\t\tif(t==0){\n\t\t\tA[ida]=x;\n\t\t\tida++;\n\t\t}else if(t==1){\n\t\t\tB[idb]=x;\n\t\t\tidb++;\n\t\t}else{\n\t\t\tC[idc]=x;\n\t\t\tidc++;\n\t\t}\n\t}\n\tsort(A+1,A+ida,cmp);\n\tsort(B+1,B+idb,cmp);\n\tsort(C+1,C+idc,cmp);\n\tll ma=0;\n\tfor(int i=1;i<ida;i++)A[i]+=A[i-1];\n\tfor(int i=1;i<idb;i++)B[i]+=B[i-1];\n\tfor(int i=1;i<idc;i++)C[i]+=C[i-1];\n\tfor(int i=0;i<=min(m,idb-1);i++){\n\t\tll id=lower_bound(C,C+idc,i)-C;\n\t\tif(i+id>m||id>=idc)break;\n\t\tll idA=m-i-id;\n\t\tidA=min(idA,ida);\n\t\tma=max(ma,B[i]+A[idA]);\n\t}\n\tcout<<ma<<"\n";\n}\nint main(){\n\tios::sync_with_stdio(false);cin.tie(0);cout.tie(0);\n\tsolve();\n}
原文地址: https://www.cveoy.top/t/topic/p6Jo 著作权归作者所有。请勿转载和采集!