Ohana Cleans Up

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=187195

题目大意:

      奥哈马清理一间被分成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 }

    

原文地址:https://www.cnblogs.com/huaszjh/p/4654960.html