【算法笔记】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 }

 

posted @ 2019-05-10 09:03  Resfeber  阅读(161)  评论(0编辑  收藏  举报