Ohana Cleans Up

点击打开链接

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
4
0101
1000
1111
0101
output
2
input
3
111
111
111
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;
}
这个程序与上一个程序最大的不同就是它在做比较行的时候直接比较了一行的字符串,而第一个是每行每个数字单独比较的,这样就比较麻烦了,不过我没想通的是为什么后者的运行时间会比前者的多。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值