2018湘潭大学程序设计竞赛【B】

题目链接: https://www.nowcoder.com/acm/contest/105/B

题意: 给你一个字母矩阵,和测试组数,让你统计字符串的字符累计出现的次数,然后让你找出需要找的字符,这个字符必须是每行每列里出现次数最多的。

题解: 暴力瞎搞。map列举一下啊。写的十分暴力,绝对不是最优解。QAQ。题好难读,看了好久才懂样例。

  1 #include<iostream>
  2 #include<string>
  3 #include<cstring>
  4 #include<cstdio>
  5 #include<map>
  6 using namespace std;
  7 int a[6][6];
  8 int h[6];
  9 int l[6];
 10 int maxh;
 11 int maxl;
 12 map<int,char> m;
 13  
 14 void init(){
 15     m[0] = '0';m[1] = '1';m[2] = '2';m[3] = '3';m[4] = '4';m[5] = '5';
 16     m[10] = '6';m[11] = '7';m[12] = '8';m[13] = '9';m[14] = 'A';m[15] = 'B';
 17     m[20] = 'C';m[21] = 'D';m[22] = 'E';m[23] = 'F';m[24] = 'G';m[25] = 'H';
 18     m[30] = 'I';m[31] = 'J';m[32] = 'K';m[33] = 'L';m[34] = 'M';m[35] = 'N';
 19     m[40] = 'O';m[41] = 'P';m[42] = 'Q';m[43] = 'R';m[44] = 'S';m[45] = 'T';
 20     m[50] = 'U';m[51] = 'V';m[52] = 'W';m[53] = 'X';m[54] = 'Y';m[55] = 'Z';
 21 }
 22  
 23 int main(){
 24     init();
 25     int n;
 26     cin >> n;
 27     while(n--){
 28         memset(a,0,sizeof(a));
 29         memset(h,0,sizeof(h));
 30         memset(l,0,sizeof(l));
 31         maxh=0;
 32         maxl=0;
 33         string s;
 34         cin >> s;
 35         for(int i=0;i<s.size();i++){
 36             if(s[i]=='0')   a[0][0]++;
 37             if(s[i]=='1')   a[0][1]++;
 38             if(s[i]=='2')   a[0][2]++;
 39             if(s[i]=='3')   a[0][3]++;
 40             if(s[i]=='4')   a[0][4]++;
 41             if(s[i]=='5')   a[0][5]++;
 42             if(s[i]=='6')   a[1][0]++;
 43             if(s[i]=='7')   a[1][1]++;
 44             if(s[i]=='8')   a[1][2]++;
 45             if(s[i]=='9')   a[1][3]++;
 46             if(s[i]=='A')   a[1][4]++;
 47             if(s[i]=='B')   a[1][5]++;  
 48             if(s[i]=='C')   a[2][0]++;
 49             if(s[i]=='D')   a[2][1]++;
 50             if(s[i]=='E')   a[2][2]++;
 51             if(s[i]=='F')   a[2][3]++;
 52             if(s[i]=='G')   a[2][4]++;
 53             if(s[i]=='H')   a[2][5]++;
 54             if(s[i]=='I')   a[3][0]++;
 55             if(s[i]=='J')   a[3][1]++;
 56             if(s[i]=='K')   a[3][2]++;
 57             if(s[i]=='L')   a[3][3]++;
 58             if(s[i]=='M')   a[3][4]++;
 59             if(s[i]=='N')   a[3][5]++;
 60             if(s[i]=='O')   a[4][0]++;
 61             if(s[i]=='P')   a[4][1]++;
 62             if(s[i]=='Q')   a[4][2]++;
 63             if(s[i]=='R')   a[4][3]++;
 64             if(s[i]=='S')   a[4][4]++;
 65             if(s[i]=='T')   a[4][5]++;
 66             if(s[i]=='U')   a[5][0]++;
 67             if(s[i]=='V')   a[5][1]++;
 68             if(s[i]=='W')   a[5][2]++;
 69             if(s[i]=='X')   a[5][3]++;
 70             if(s[i]=='Y')   a[5][4]++;
 71             if(s[i]=='Z')   a[5][5]++;
 72         }
 73              
 74         for(int i = 0 ; i < 6 ; i++){
 75             int sum = 0;
 76             for(int j = 0 ; j < 6; j++)
 77                 sum += a[i][j]; 
 78             
 79             h[i] = sum;
 80         }
 81          
 82          
 83         for(int i = 0 ; i < 6; i++){
 84             int sum = 0;
 85             for(int j = 0 ; j < 6; j++)
 86                 sum += a[j][i];
 87             
 88             l[i] = sum;
 89         }
 90          
 91         for(int i = 0 ; i < 6; i++){
 92             if(h[i] > maxh)
 93                 maxh = h[i];
 94             if(l[i] > maxl)
 95                 maxl = l[i];
 96         }
 97          
 98         //cout << maxh <<" " << maxl << endl;
 99         for(int i = 0 ; i < 6; i++){
100             for(int j = 0; j < 6; j++){
101                 //cout << h[i] << " " << l[j]<<endl;
102                 if(h[i] == maxh && l[j] == maxl){  
103                     int cnt = i*10+j;
104                     printf("%c",m[cnt]);
105                 }
106             }
107         }
108         cout << endl;
109     }
110 }
View Code

猜你喜欢

转载自www.cnblogs.com/Asumi/p/8991443.html