hdu 4146 Flip Game

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4146

Flip Game

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1789    Accepted Submission(s): 585


Problem Description
Flip game is played on a square N*N field with two-sided pieces placed on each of its N^2 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. The rows are numbered with integers from 1 to N upside down; the columns are numbered with integers from 1 to N from the left to the right. Sequences of commands (x i, y i) are given from input, which means that both pieces in row x i and pieces in column y i will be flipped (Note that piece (x i, y i) will be flipped twice here). Can you tell me how many white pieces after sequences of commands?
Consider the following 4*4 field as an example:

bwww
wbww
wwbw
wwwb

Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up.
Two commands are given in order: (1, 1), (4, 4). Then we can get the final 4*4 field as follows:

bbbw
bbwb
bwbb
wbbb

So the answer is 4 as there are 4 white pieces in the final field.
 

Input
The first line contains a positive integer T, indicating the number of test cases (1 <= T <= 20).
For each case, the first line contains a positive integer N, indicating the size of field; The following N lines contain N characters each which represent the initial field. The following line contain an integer Q, indicating the number of commands; each of the following Q lines contains two integer (x i, y i), represent a command (1 <= N <= 1000, 0 <= Q <= 100000, 1 <= x i, y i <= N).
 

Output
For each case, please print the case number (beginning with 1) and the number of white pieces after sequences of commands.
 

Sample Input
  
  
2 4 bwww wbww wwbw wwwb 2 1 1 4 4 4 wwww wwww wwww wwww 1 1 1
 

Sample Output
  
  
Case #1: 4 Case #2: 10
 

Author
Hzwu@SWJTU
 

Source
 
题目大意:在一个x*y的方阵里分为白和黑两种颜色,题目说输出1 1,4 4代表改变一次第一行第一列和第四行第四列。(如果Xi(代表X的横坐标下表)与Yi(Y的纵坐标)相等时改变两次)。最后要输出的结果是这个方针中有多少白色块。

解题思路:这个题目中时间要求特别严格,超时n多次~~~需要采用位运算进行次数的处理。(如果翻转的次数为偶数次就不需要进行处理,因为翻转了也要在翻转回来)

还要就是输入!!!刚开始采用的是字符输入的超时!改成字符串输入A掉了,祝你们好运~~~~

详见代码。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

char ch[1010][1010];
int vh[1010],vl[1010];
int n;

int main()
{
    int t;
    int q=1;
    scanf("%d",&t);
    while (t--)
    {
        scanf("%d",&n);
        memset(vh,0,sizeof(vh));
        memset(vl,0,sizeof(vl));
        for (int i=1; i<=n; i++)
        {
            scanf("%s",ch[i]+1);
            //getchar();
            //for (int j=1; j<=n; j++)
            //{
            //    ch[i][j]=getchar();
            //}
        }
        int k;
        scanf("%d",&k);
        while (k--)
        {
            int x,y;
            scanf("%d%d",&x,&y); 
            vh[x]^=1;
            vl[y]^=1;
        }
        int ans=0;
        for (int i=1; i<=n; i++)
        {
            for (int j=1; j<=n; j++)
            {
                if(vh[i]+vl[j]==1)
                {
                    if (ch[i][j]=='b')
                        ans++;
                }
                else if (ch[i][j]=='w')
                    ans++;
            }
        }
        //return ans;
        //turn();
        printf ("Case #%d: %d\n",q++,ans);
    }
    return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值