2 5 2 10 4 3 8 1 12 1 2 5 2 10 4 3 8 1 12 1 3
3 -1
这题神坑!巨坑!说到底还是经验不足啊。。。
一开始写没有读完就break掉了,忘了这是一个多组数据的题目。。。
结果。。结果。。比赛时盯着这题起码看了一个小时还是没过掉。。。(心塞塞)。
总之吃一堑长一智,下次这种错误不会再犯了。
#include <iostream> #include <algorithm> #include <cstring> using namespace std; int x[10005]={0}; int nx[10005]={0}; int main(void) { int t; scanf("%d%*c",&t); while(t--) { int n,m,k,count=0; scanf("%d%d%d%*c",&n,&m,&k); memset(x,0,sizeof x); memset(nx,0,sizeof nx); for(int i=1 ; i<=n ; ++i)//输入 n scanf("%d",&x[i]); for(int i=1 ; i<=m ; ++i)//m { int temp; scanf("%d",&temp); if(k>=x[temp]) { k-=x[temp]; x[temp]=0; count++; } else { count=-1; //break; 对!没错!就是这里! } } if(count==-1)printf("-1\n"); else { int p=0; for(int i=1 ; i<=n ; ++i)//n { if(x[i]) { nx[p++]=x[i]; } } sort(nx,nx+p);//nlogn for(int i=0 ; i<p ; ++i)//m+nlogn+2*n { if(k>=nx[i]) { k-=nx[i]; count++; } else { break; } } printf("%d\n",count); } } return 0; }