「杂题乱刷2」CF1527B2
1.「杂题乱刷」CF1904B2.「杂题乱刷」CF1620E3.「杂题乱刷」CF978G4.「杂题乱刷」洛谷P92535.「杂题乱刷」CF624B6.「杂题乱刷」CF1221B7.「杂题乱刷」CF1585B8.「杂题乱刷」CF468A9.「杂题乱刷」洛谷P951510.「杂题乱刷」CF283A11.「杂题乱刷」洛谷P953312.「杂题乱刷」CF1914E1 & CF1914E213.「杂题乱刷」AT_abc280_d14.「杂题乱刷」CF1916C15.「杂题乱刷」AT_arc041_b16.【待补题解】AT_arc146_a17.「杂题乱刷」AT_abc337_e18.「杂题乱刷」AT_abc308_f19.「杂题乱刷」ZhengRui 54. 【17 普及 13】幻想嘉年华20.「杂题乱刷」CF1925C & CF1924A21.「杂题乱刷」CF1927D22.「杂题乱刷」洛谷 P1015523.「杂题乱刷」洛谷 P171224.「杂题乱刷」洛谷 P886625.「杂题乱刷」CF1937C & CF1936A26.「杂题乱刷」CF1934D227.「杂题乱刷」洛谷 P480128.「杂题乱刷」ZhengRui 611 【19寒假普转提】树的权29.「杂题乱刷」ZhengRui 281 汪初雪与高流星30.「杂题乱刷」at_abc092_d & AT_arc093_b31.「杂题乱刷」CF74E32.「杂题乱刷」AT_abc279_e33.「杂题乱刷」AT_abc096_d34.「杂题乱刷」CF1973D35.「杂题乱刷」CF1650D36.「杂题乱刷」CF1650E37.「杂题乱刷」CF1977B38.「杂题乱刷」CF1977C39.「杂题乱刷」CF460C40.「杂题乱刷」P827941.「杂题乱刷」AT_abc160_e42.「杂题乱刷」P1051243.「杂题乱刷」AT_abc358_g44.「杂题乱刷」 AT_abc123_d45.「杂题乱刷」P7840 & AT_abc359_f46.「杂题乱刷」CF1987C47.「杂题乱刷」P1067848.「杂题乱刷2」CF1702F49.「杂题乱刷2」CF402D Upgrading Array50.「杂题乱刷2」CF1506E Restoring the Permutation51.「杂题乱刷2」CF727D52.「杂题乱刷2」CF1615C Menorah53.「杂题乱刷2」CF1889A Qingshan Loves Strings 2
54.「杂题乱刷2」CF1527B2
55.「杂题乱刷2」CF1108E256.「杂题乱刷2」CF827B57.「杂题乱刷2」CF1227D258.「杂题乱刷2」CF2066B题目链接
解题思路
这篇题解分 B1,B2 两个部分来讲。
B1 sol:
考虑字符串中
-
若
,且字符串回文时,那么此时,后手可以一直模仿先手的操作,直到字符串含有最后一个 时,后手可以反转这个字符串,那么此时后手的代价比先手要少 ,综上,后手此时必胜。 -
若
,且字符串回文时,那么此时,字符串的长度一定为奇数,且字符串中间的数字一定为 ,那么此时,先手可以将中间的 变为 ,此时若还有剩余的 ,则先手必胜,否则后手必胜。
综上,这就是 B1 的做法。
B2 sol:
仍然考虑字符串中
若字符串已经回文,则直接按照 B1 的做法来做。
否则,先手一定可以反转字符串,直到后手把这个字符串变为回文,那么此时:
-
若
,由于此时先手仍然可以一直模仿后手的操作,由于前期先手比后手付出的代价要少,因此可以得出先手必胜。 -
若
,如果字符串中间的数字不为 则先手仍然可以模仿后手的情况,此时先手必胜。否则,若此时 ,则后手去掉最外侧的 ,此时先手与后手平局,其余情况,我们发现先手的所需代价至少比后手少 ,先手必胜。
参考代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
//#define map unordered_map
#define re register
#define ll long long
#define forl(i,a,b) for(re ll i=a;i<=b;i++)
#define forr(i,a,b) for(re ll i=a;i>=b;i--)
#define forll(i,a,b,c) for(re ll i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(re ll i=a;i>=b;i-=c)
#define pii pair<ll,ll>
#define mid ((l+r)>>1)
#define lowbit(x) (x&-x)
#define pb push_back
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
ll _t_;
void _clear(){}
ll n;
string s;
bool check(string s)
{
ll L=1,R=n;
while(L<=R && s[L]==s[R])
L++,R--;
return L>=R;
}
/*
11010
11011 0:1
11111 1:1
1001101
1011001
1011101 0:1
1111101 1:1
1011111
*/
void solve()
{
_clear();
cin>>n>>s;
s=' '+s;
if(check(s))
{
ll sum=0;
for(auto i:s)
sum+=i=='0';
if(sum%2==0)
{
cout<<"BOB\n";
return ;
}
if(sum==1)
{
cout<<"BOB\n";
return ;
}
cout<<"ALICE\n";
return ;
}
ll sum=0;
for(auto i:s)
sum+=i=='0';
if(n%2 && sum==2 && s[(n+1)/2]=='0')
cout<<"DRAW\n";
else
cout<<"ALICE\n";
// exit(-1);
}
int main()
{
// freopen("tst.txt","r",stdin);
// freopen("sans.txt","w",stdout);
IOS;
_t_=1;
cin>>_t_;
while(_t_--)
solve();
QwQ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?