Ohana Cleans Up

来源:互联网 发布:爱奇艺获取网站源码 编辑:程序博客网 时间:2024/06/09 22:09

点击打开链接

Ohana Matsumae is trying to clean a room, which is divided up into an n by n grid of squares. Each square is initially either clean or dirty. Ohana can sweep her broom over columns of the grid. Her broom is very strange: if she sweeps over a clean square, it will become dirty, and if she sweeps over a dirty square, it will become clean. She wants to sweep some columns of the room to maximize the number of rows that are completely clean. It is not allowed to sweep over the part of the column, Ohana can only sweep the whole column.

Return the maximum number of rows that she can make completely clean.

Input

The first line of input will be a single integer n (1 ≤ n ≤ 100).

The next n lines will describe the state of the room. The i-th line will contain a binary string with n characters denoting the state of the i-th row of the room. The j-th character on this line is '1' if the j-th square in the i-th row is clean, and '0' if it is dirty.

Output

The output should be a single line containing an integer equal to a maximum possible number of rows that are completely clean.

Examples
input
40101100011110101
output
2
input
3111111111
output
3

这道题的大意就是求出一个n*n的列表中相同行数最大的行数。

算法:

//#include<cstdio> #include<stdio.h>  #include <string.h>  #include<iostream>  #include<algorithm>  using namespace std;    int main()  {      char s[105][105];      int n,i,max=0,c,j,k;      scanf("%d",&n);      for(i=0;i<n;i++)      {          scanf("%s",s[i]);      }      for(i=0;i<n;i++)      {          c=0;          for(j=i+1;j<n;j++)          {              for(k=0;k<n;k++)              {                  if(s[i][k]==s[j][k])                  {                      continue;                  }                  else                  {                      break;                  }              }              if(k==n)              {                  c++;              }          }       if(c>max)          {              max=c;          }      }      printf("%d\n",max+1); //加一是加上包括自己的那一行     return 0;  }
这个算法比较暴力,把每一行依次与后面的行数进行比较,依次类推,求出相同行数最多的一组。

#include<cstdio>  #include <string.h>  #include<iostream>  #include<algorithm>  using namespace std;  string mps[110];int main(){    int n;    cin>>n;    for(int i = 0;i < n; i++) cin>>mps[i];    int res = 0;    for(int i = 0;i < n; i++) {        int ans = 0;        for(int j = 0;j < n; j++){            if(mps[i] == mps[j]) ans++;        }        res = max(ans,res);    }    cout<<res<<endl;return 0;}
这个程序与上一个程序最大的不同就是它在做比较行的时候直接比较了一行的字符串,而第一个是每行每个数字单独比较的,这样就比较麻烦了,不过我没想通的是为什么后者的运行时间会比前者的多。


原创粉丝点击