Educational Codeforces Round 73 (Rated for Div. 2)E(思维,博弈)
//这道题博弈的核心就是不能让后手有一段只能放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(思维,博弈)的更多相关文章
- Educational Codeforces Round 73 (Rated for Div. 2)
传送门 A. 2048 Game 乱搞即可. Code #include <bits/stdc++.h> #define MP make_pair #define fi first #de ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
这道题里线段树用来区间更新(每次给更大的区间加上当前区间的权重),用log的复杂度加快了更新速度,也用了区间查询(查询当前区间向右直至最右中以当前区间端点向右一段区间的和中最大的那一段的和),也用lo ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- C# Socket通信DEMO
一.套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本 ...
- 树莓派安装中文输入法Fcitx及Google拼音输入法
本来是想给树莓派安装搜狗输入法的, 搜狗输入法Linux版:https://pinyin.sogou.com/linux/?r=pinyin 但是一直安装不成功,后面发现原来是系统架构不同导致的,搜狗 ...
- ANSYS中 *VWRITE命令使用
目录 1. *VWRITE命令 2. Fortran字段描述符 1. *VWRITE命令 ANSYS输出结果到文件,采用*VWRITE命令,具体命令如下: *VWRITE,Par1,Par2,.... ...
- netty(二)---客户端连接
概述 先了解一下 netty 大概框架图 ,可以看到客户端的创建和服务端最大的区别 - 服务端传入两个 EventLoopGroup,客户端传入一个 EventLoopGroup - channel ...
- 【C语言】将输入的10个整数逆序输出
代码1: #include <stdio.h> int main() { ], b[]; int i,j; printf("请输入10个整数:\n"); ; i < ...
- 【CSS属性#1】
" 目录 一.宽和高 二.字体属性 1. 文字字体 font-famlly 2. 字体大小 font-size 3. 字重(粗细) font-weight 4. 文本颜色 color 三.字 ...
- LCT 维护边双 / 点双的模板
用 \(\text{LCT}\) 维护边双的做法是:加入一条非树边时,将这段树上路径合并为一个点代表这个边双,具体实现用并查集合并点,在 \(\text{Splay}\) 与 \(\text{Acce ...
- 基于科大讯飞AIUI平台自定义语义库的开发
说明:我写这篇文章的主要目的是因为我在做这块的时候遇到过一些坑,也是希望后来者能少走一些弯路. 科大讯飞AIUI开放平台地址 科大讯飞AIUI开放平台后处理地址 AIUI后处理开放平台协议 1. 科大 ...
- 影响IPSec的网络问题
影响IPSec VPN的网络问题:①.动态地址问题:两个 站点之间IPSec VPN的条件是站点之间有固定的IP地址,假如说分支站点采用ADSL上网链路,那么其IP地址是动态的,那么就在VPN时出现问 ...
- 常用SQL语句大全
一些常用SQL语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql se ...