题目链接:
点击打开链接
题意:比较难理解
012345
6789AB
CDEFGH
IJKLMN
OPQRST
UVWXYZ
6789AB
CDEFGH
IJKLMN
OPQRST
UVWXYZ
先给出一个固定的二维字符串a。然后再给一个字符串s。判断,a的每一行和与s中相同字符的个数。然后再判断每一列和s中相同字符的个数。然后输出行列数最大的字符。
解释一下样例:
如第一个样例 为 1 3 5 7 9
第一列的与这个字符串相同的个数为0
第二列的与这个字符串相同的个数为2
第三列的与这个字符串相同的个数为0
第四列的与这个字符串相同的个数为2
第五列的与这个字符串相同的个数为0
第六列的与这个字符串相同的个数为1
然后我们看一下行的
第一行的与这个字符串相同的个数为3
第二行的与这个字符串相同的个数为2
第三行的与这个字符串相同的个数为0
第四行的与这个字符串相同的个数为0
第五行的与这个字符串相同的个数为0
第六行的与这个字符串相同的个数为0
所以行数最大的为 第一行,列数最多的为第二列 和 第四列
所以输出第一行的第二个 和 第 一行的第四列。
#include<bits/stdc++.h>
using namespace std;
char aim[7][7]={
"012345","6789AB","CDEFGH","IJKLMN","OPQRST","UVWXYZ"
};
int main(){
int z;
cin >> z;
while(z--){
char a [600];
scanf("%s",a);
int len = strlen(a);
int H = -1,L = -1;
int ans1[6];
int ans2[6];
memset(ans1,0,sizeof(ans1));
memset(ans2,0,sizeof(ans2));
for(int i = 0 ; i < 6 ; i ++){
for(int j = 0 ; j < 6 ; j ++){
for(int k = 0 ; k < len ;k ++){
if(aim[i][j] == a[k]){
ans1[i] ++;
ans2[j] ++;
}
}
}
}
int LL = 0;
int RR = 0;
for(int i = 0 ; i < 6 ; i ++){
LL = max(LL,ans1[i]);
}
for(int i = 0 ; i < 6 ; i ++){
RR = max(RR,ans2[i]);
}
for(int i = 0 ; i < 6 ; i ++){
for(int j = 0 ; j < 6 ;j ++){
if(ans1[i] == LL && ans2[j] == RR)
cout << aim[i][j] ;
}
}
cout << endl;
}
}
/*
3
13579
AADD
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/