本文主要是介绍2011百校联动“菜鸟杯”程序设计公开赛Flip Game,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开两个数组,一个表示行一个表示列,记录对行和列的翻转次数,最后统一扫描,,如果一开始是b经过奇数次翻转后变为w,如果一开始是w,经过偶数次翻转为w。。。。
AC代码:
#include<iostream>
#include<string.h>
#include<string>
#define N 1005
using namespace std;
char a[N][N];
int row[N],col[N];
int main()
{ int Case;
cin>>Case;
int tot=0;
while(Case--)
{ int n;
cin>>n;
for(int i=0;i<n;++i)
scanf("%s",a[i]);
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
int m;
cin>>m;
for(int i=0;i<m;++i)
{ int a,b;
cin>>a>>b;
a--;b--;
row[a]=1-row[a];
col[b]=1-col[b];
}
int num=0;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
if(row[i]+col[j]==1)
{if(a[i][j]=='b')
num++;
}
else { if(a[i][j]=='w') num++;
}
cout<<"Case #"<<++tot<<": "<<num<<endl;
}return 0;
}
这篇关于2011百校联动“菜鸟杯”程序设计公开赛Flip Game的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!