• Codeforces 1221E Game With String(string分a,b变换,博弈)


    链接:http://codeforces.com/contest/1221/problem/E

    题意:给出有.x组成的字符串,两个人博弈,一个人每次可以选择一段连续长度为a的.使得它变成x,另一个选择长度为b的进行操作,为谁会输,保证a>b

    题解:

        #include <bits/stdc++.h>
        using namespace std;
         
        const int maxn=3e5+5;
        char s[maxn];
        int T, n, x, y, a[maxn];
        vector<int> v;
         
        int main(){
           // freopen("in.txt", "r", stdin);
            for(cin>>T; T--; )
            {
                cin>>x>>y;
                cin>>(s+1);
                n=strlen(s+1);
                for(int i=1; i<=n; i++)
                    a[i]= s[i]=='.'?1:0;
                int cnt=0, ok=0;
                v.clear();
                for(int i=1; i<=n; i++){
                    if(a[i]) ++cnt;
                    else if(cnt) v.push_back(cnt), cnt=0;
                }
                if(cnt) v.push_back(cnt), cnt=0;
                for(auto &val: v){
                    if(val<x&&val>=y) ok=1;
                    if(val>=2*y) ++cnt;
                }
         
                if(ok || cnt>=2){
                    cout<<"No"<<"
    "; continue;
                }
                if(cnt==0){
                    for(auto &val: v) if(val>=x) ++cnt;
                    if(cnt&1){
                        cout<<"Yes"<<"
    "; continue;
                    }else{
                        cout<<"No"<<"
    "; continue;
                    }
                }
                if(cnt==1){
                    int max_len=*max_element(v.begin(), v.end());
                    int flag=0; cnt=0;
                    for(auto &val: v) if(val!=max_len&&val>=x) ++cnt;
                    for(int l=1; l+x-1<=max_len; l++)
                    {
                        int r=l+x-1;
                        int left=l-1, right=max_len-r;
                        if(left>=2*y || right>=2*y) continue;
                        if((left>=y&&left<x) || (right>=y&&right<x)) continue;
                        int tmp=cnt+(left>=x)+(right>=x);
                        if(tmp%2==0){
                            flag=1; cout<<"Yes"<<"
    "; break;
                        }
                    }
                    if(!flag){
                        cout<<"No"<<"
    "; continue;
                    }
                }
         
            }
            return 0;
        }
  • 相关阅读:
    满屏的宽高纯CSS布局
    截屏上传插件开发流程
    COM ACTIVEX 中的BSTR 类型与其它类型转换
    线程中访问控件
    OOP三言两语
    通过iframe上传
    历年作品点评
    每周进度及工作量统计2016090820160915
    英文词频统计的java实现方法
    四人小组项目——连连看
  • 原文地址:https://www.cnblogs.com/Yokel062/p/11891287.html
Copyright © 2020-2023  润新知