acm pku 1063 Flip and Shift

问题分析:首先要明确偶数位置的棋子只能和偶数位置的其他棋子相交换,奇数位置同理。若要黑色的棋子都连在一起,则前提是偶数位置上的黑色棋子与奇数位置上的棋子个数相等或相差一个。 其次,设黑白棋子总个数为sum。sum为奇数时,一定有解。这是因为此时奇数位置上的棋子可以被置换到偶数位置。例如,现在有1,2,...19个棋子,显然19号棋子可以和2号棋子交换位置。

代码:

#include <iostream>

#include <cmath>
using namespace std;


int main()
{
    
   //  freopen("E:\\input.txt","r",stdin);
     int cases=0,sum=0;
     cin>>cases;
     for(int i=0;i<cases;i++)
     {
                    cin>>sum;
                    char temp;
                     int n1=0,n2=0;
                     for(int j=0;j<sum;j++)
                    {
                        cin>>temp;
                       if(temp=='0')
                       {
                            if(j%2!=0)
                            {
                                n1++;
                            }
                            else
                            {
                                n2++;
                            }
                        }
                    }
                    if(sum%2!=0)
                    {
                        cout<<"YES"<<endl;
                        continue;
                    }
                    if(abs(n1-n2)<=1)
                    {
                         cout<<"YES"<<endl;
                    }
                    else
                    {
                         cout<<"NO"<<endl;
                    }
                  
            
     }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值