//这道题博弈的核心就是不能让后手有一段只能放b而长度不够放a的段,并且先手要放最后一次
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int length[300007];
int main(){
ios::sync_with_stdio(false);//多组数据输入cin,cout容易超时
cin.tie(NULL);
cout.tie(NULL);
int q;
cin>>q;
while(q--){
int a,b;
cin>>a>>b;
string s;
cin>>s;
int n=s.size();
int tmp=0;
int cnt1=0,cnt2=0,cnt3=0;
int len=0;
for(int i=0;i<n;++i){
if(s[i]=='.')
++tmp;
else{//记录各个长度段的个数
if(tmp>=b&&tmp<a)
++cnt1;
else if(tmp>=a&&tmp<2*b)
++cnt2;
else if(tmp>=2*b)
++cnt3,len=tmp;
tmp=0;
}
}
if(s[n-1]=='.'){//如果有最后一段不要忘了更新
if(tmp>=b&&tmp<a)
++cnt1;
else if(tmp>=a&&tmp<2*b)
++cnt2;
else if(tmp>=2*b)
++cnt3,len=tmp;
}
if(cnt3>=2||cnt1)//如果有两段长度大于等于2b,后手可以把其中一段分割出一段长度为b留给自己最后一次放置a必输,且如果有一段长度b可以放a不能放先手必输
cout<<"NO\n";
else if(!cnt3){//如果没有长度大于等于2b的段,每段都只能容许a或者b放一次
if(cnt2&1)//如果段的个数为奇数先手必胜
cout<<"YES\n";
else//偶数后手必胜
cout<<"NO\n";
}
else if(cnt2&1){//如果只有一段大于等于2b的话,并且a~2b-1长度段的个数为奇数
if(len>=2*a&&len<a+3*b-1)//如果最长段的长度在这个范围内,先手可以把它分割成一段a~2b-1的段使得剩下所有长度段不是不够放b就是ab都可以放并且数量为偶数,此时后手必输
cout<<"YES\n";
else//反之先手必输,只要先手不能必胜后手就有办法赢
cout<<"NO\n";
}
else{//如果只有一段大于等于2b的话,并且a~2b-1长度段的个数为偶数
if(len<=a+2*b-2||len>=3*a&&len<a+4*b-1)//如果最长段的长度可以使a放置完后剩余段b都放不了,那么剩下偶数段可以放ab的先手会放最后一次,此时先手必胜,另一种情况是a放置完后可以把原本长度分割成两段,两段都可以放a并且不能放下两个b,如果让后手放置后使得一段只能放b而不能放a,后手必胜,所以此时先手必胜
cout<<"YES\n";
else
cout<<"NO\n";
}
}
return 0;
}

Educational Codeforces Round 73 (Rated for Div. 2)E(思维,博弈)的更多相关文章

  1. Educational Codeforces Round 73 (Rated for Div. 2)

    传送门 A. 2048 Game 乱搞即可. Code #include <bits/stdc++.h> #define MP make_pair #define fi first #de ...

  2. Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again(DP)

    链接: https://codeforces.com/contest/1221/problem/D 题意: You have a fence consisting of n vertical boar ...

  3. Educational Codeforces Round 73 (Rated for Div. 2) B. Knights(构造)

    链接: https://codeforces.com/contest/1221/problem/B 题意: You are given a chess board with n rows and n ...

  4. Educational Codeforces Round 73 (Rated for Div. 2) C. Perfect Team

    链接: https://codeforces.com/contest/1221/problem/C 题意: You may have already known that a standard ICP ...

  5. Educational Codeforces Round 73 (Rated for Div. 2) A. 2048 Game

    链接: https://codeforces.com/contest/1221/problem/A 题意: You are playing a variation of game 2048. Init ...

  6. Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)

    这道题里线段树用来区间更新(每次给更大的区间加上当前区间的权重),用log的复杂度加快了更新速度,也用了区间查询(查询当前区间向右直至最右中以当前区间端点向右一段区间的和中最大的那一段的和),也用lo ...

  7. Educational Codeforces Round 73 (Rated for Div. 2)D(DP,思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;long long a[300007],b[3 ...

  8. C. Brutality Educational Codeforces Round 59 (Rated for Div. 2) 贪心+思维

    C. Brutality time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  9. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

随机推荐

  1. +(new Date())

    +(new Date()) 等于 new Date().getTime();展示 1561003191879 毫秒时间戳

  2. IDF-CTF-简单的Elf逆向Writeup

    ElfCrackMe1 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  3. 使用python同时替换json多个指定key的value

    1.如何同时替换json多个指定key的value import json from jsonpath_ng import parse def join_paths(regx_path,new_val ...

  4. Scrapy - response.css()

    选择文本 response.css('span::text') 选择href response.css('a::attr(href)')

  5. buuctf Easysql 小记

    堆叠注入 利用原理: 补充系统变量@@sql_modesql_mode:是一组mysql支持的基本语法及校验规则PIPES_AS_CONCAT:将“||”视为字符串的连接操作符而非或运算符,这和Ora ...

  6. Airflow 操作知识总结(完善中)

    airflow默认以utc时区运行,如果需要计算正确的时间,需要把时间进行时区转换,核心代码如下 #将本地时间转换为utc时间,再设置为start_date tz = pytz.timezone('A ...

  7. 吴裕雄 PYTHON 神经网络——TENSORFLOW 双隐藏层自编码器设计处理MNIST手写数字数据集并使用TENSORBORD描绘神经网络数据2

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data os.envi ...

  8. Rsync+inotify数据同步

    安装环境 备份服务器端:CentOS7,IP:192.168.1.100 备份客户端:CentOS7,IP:192.168.1.200 服务器端Rsync服务部署 1.安装程序包 # yum –y i ...

  9. 实现一个简易的Unity网络同步引擎——netgo

    实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且 ...

  10. Vue入门学习总结一:Vue定义

    Vue的功能是为视图提供响应的数据绑定及视图组件,Vue是数据驱动式的,不直接修改DOM而是直接操作数据实现对界面进行修改. 首先我们需要在script中定义一个Vue实例,定义方法如下: var v ...