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
    	
    */
    

      

  • 相关阅读:
    Swift 可选项 Optional
    Swift 枚举的用法
    Swift 函数
    Swift 流程控制
    iPhone 相册取出视频宽高分辨率是相反的 解决方案
    Mac 下GitHub 访问慢解决方案
    Ipa 脱壳工具 Clutch dumpdecrypted 使用
    逆向 make 打包错误解决方案 make: *** [internal-package] Error 2
    删除 $PATH 路径下多余的文件地址
    Reveal 破解 无限试用
  • 原文地址:https://www.cnblogs.com/JYYHH/p/11566607.html
Copyright © 2011-2022 走看看