题目链接:http://codeforces.com/problemset/problem/554/B
题目大意:
奥哈马清理一间被分成n*n格的房间,每格使用数字‘1’和‘0’来表示状态,单格用1表示,则表明是干净的,用0表示则是脏的。清理时,奥哈马只能一整列的打扫,而且被打扫的单格如果是干净(1)的就会变脏(0),而如果是脏(0)的就会变干净(1)。清理的列数不定,问他清理后最多有多少行能完全干净?
案例:
Input
4 0101 1000 1111 0101
Output
2
Input
3 111 111 111
Output
3
题目分析:
不计列数清理多少次,则可忽略此处条件,从行数考虑。行与行相同则清理后结果相同,所以本题可以从行之间相同的初始状态着手,计算出最大的行相同数即为所求。
源代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 #define max 100 5 int main() 6 { 7 int n,p,x=0,i; 8 string s[max]; 9 cin>>n;//输入行(列)数 10 for(i=0;i<n;i++) 11 cin>>s[i];//输入每行的初始状况 12 for(i=0;i<n;i++) 13 { for(int j=0;j<n;j++) 14 if(s[i]==s[j]) 15 p++;//找出具有相同状态的行数 16 if(p>x) x=p;//将最大的行数赋值给x 17 p=0; 18 } 19 cout<<x<<endl; 20 return 0; 21 }
时间: 2024-10-12 12:16:49