【算法笔记】B1058 选择题
思路:
重点在于验证答案时括号的吸收,验证答案只要对比正确选项的数量就可以了。题目不算太难,就是数据有点多。。
code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct ti{ 4 int tihao; 5 int fen; 6 int xuan; 7 int Tnum; 8 bool zhengquedaan[127]={0}; 9 int cuo=0; 10 }Data[101]; 11 bool cmp(ti A,ti B){ 12 return A.cuo!=B.cuo? A.cuo>B.cuo : A.tihao<B.tihao; 13 } 14 int main(){ 15 int N,M; 16 scanf("%d %d",&N,&M); 17 for(int i=0;i<M;i++){ 18 scanf("%d",&Data[i].fen); 19 scanf("%d",&Data[i].xuan); 20 scanf("%d",&Data[i].Tnum); 21 for(int j=0;j<Data[i].Tnum;j++){ 22 char c; 23 scanf(" %c",&c); 24 int a=c; 25 Data[i].zhengquedaan[a]=true; 26 } 27 Data[i].tihao=i+1; 28 } 29 for(int i=0;i<N;i++){ 30 int fenshu=0; 31 for(int k=0;k<M;k++){ 32 int num; 33 char c; 34 int zhengnum=0; 35 int flag=true; 36 scanf(" (%d",&num); 37 for(int j=0;j<num;j++){ 38 scanf(" %c",&c); 39 if(Data[k].zhengquedaan[c]) zhengnum++; 40 else flag=false; 41 } 42 getchar(); 43 if(zhengnum==Data[k].Tnum&&flag) fenshu+=Data[k].fen; 44 else Data[k].cuo++; 45 } 46 printf("%d\n",fenshu); 47 } 48 sort(Data,Data+M,cmp); 49 if(Data[0].cuo==0){ 50 printf("Too simple"); 51 return 0; 52 } 53 printf("%d",Data[0].cuo); 54 for(int i=0;i<M;i++){ 55 if(Data[i].cuo!=Data[0].cuo) break; 56 printf(" %d",Data[i].tihao); 57 } 58 return 0; 59 }