9、涂棋盘--2017网易春招
[编程题] 涂棋盘
时间限制:1秒
空间限制:32768K
小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘。小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格。
输入描述:
输入数据包括n+1行:
第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小
接下来的n行每行一个字符串表示第i行棋盘的颜色,'W'表示白色,'B'表示黑色
输出描述:
输出小易会涂画的区域大小
输入例子:
3 BWW BBB BWB
输出例子:
3
解题思路:本题求每一列连续相同字符的子串最长值,然后再求出所有列中最长的,即为结果
本题主要遇到以下几个问题
1)求得没考虑连续,只是求了W个数B个数,求最大值了
2)求连续的,给每一列记录的m[j]赋值时用的count,其实应该是m[j]和count的最大的
3)每次处理后count置为初始1
4)memset初始化,最后一个参数为sizof(类型)*数组个数
1 #include <iostream> 2 #include <algorithm> 3 #include <memory.h> 4 using namespace std; 5 6 int main() 7 { 8 int n; 9 while(cin>>n) 10 { 11 char a[n][n]; 12 for(int i=0;i<n;i++) 13 { 14 for(int j=0;j<n;j++) 15 { 16 cin>>a[i][j]; 17 } 18 } 19 20 int m[n]; 21 memset(m,0,sizeof(int)*n); 22 int count = 1; 23 for(int j=0;j<n;j++) 24 { 25 for(int i=0;i<n-1;i++) 26 { 27 if(a[i+1][j] == a[i][j]) 28 { 29 count++; 30 if(i==n-2) 31 { 32 m[j] = max(m[j],count); 33 } 34 } 35 else 36 { 37 m[j] = max(m[j],count); 38 count = 1; 39 } 40 } 41 count = 1; 42 } 43 count = m[0]; 44 for(int i=1;i<n;i++) 45 { 46 if(m[i]>count) 47 count = m[i]; 48 } 49 cout<<count<<endl; 50 } 51 }