zoukankan      html  css  js  c++  java
  • Codeforces 1221 E Game With String

    题面

       第一眼以为是SG函数找规律题,然后发现并不是公平游戏。。。。

       不过后来想了想,其实这样反而更好做。

        这个游戏的一个显然的特性是,任何时候当场上存在长度 ∈[b,a)的块时,Bob必胜。(考虑贪心)

        而这题的关键是发现,如果Bob操作时场上还有长度>=2b的块,那么Bob也必胜,因为Bob此时可以构造出一个长度为b的块。

        剩下的剩下就是暴力分情况讨论了,看起来是思路已经明确了,但是细节暴多。。。。留给你们自己思考吧w

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    inline int read(){
    	int x=0; char ch=getchar();
    	for(;!isdigit(ch);ch=getchar());
    	for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    	return x;
    } 
    
    bool fl;
    
    inline int Get(){
    	int x=0; char ch=getchar();
    	for(;ch=='.';ch=getchar()) x++;
    	if(ch=='
    ') fl=1;
    	return x;
    }
    
    int Q,a,b,now;
    
    inline bool solve(){
    	a=read(),b=read();
    	
    	int BA=0,BB=0,DB=0,mx=0;
    	for(fl=0;!fl;) now=Get(),BA+=now>=a,BB+=now>=b,DB+=now>=b*2,mx=max(mx,now);
    	
    	if(BB>BA) return 0;
    	if(a>=2*b) return BA==1&&mx<=a+2*b-2;
    	if(mx>a+4*b-2||DB>1) return 0;
    	if(DB) return ((BA&1)&&(mx>=3*a||mx<=a+2*b-2))||(!(BA&1)&&mx>=2*a&&mx<=a+3*b-2);
    	return BA&1;
    }
    
    int main(){
    	for(Q=read();Q;Q--) puts(solve()?"YES":"NO");
    	return 0;
    }
    
    /*
        [b,a)
        只要轮到Bob操作的时候,场上存在>=2b的块,那么Bob必胜 !
    	
    	1.a>=2b 这样比较惨,只能Alice第一次有填的并且填完之后所有都<b
    	
    	2.a∈[b+1,2b-1] 正常情况,当且仅当场上只有一块>=2b的且 len<=a+4b-2
    	
    */
    

      

  • 相关阅读:
    Delphi单元文件之-防止程序重复执行
    cxGrid使用汇总2
    Delphi数组复制
    cxGrid使用汇总1
    Delphi XE5 android 获取网络状态
    xe5 android sample 中的 SimpleList 是怎样绑定的
    XE5 Android 开发数据访问手机端 解决乱码的办法
    设计模式之代理模式
    设计模式之单例模式及原型模式
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/JYYHH/p/11566607.html
Copyright © 2011-2022 走看看