CF1634A
简单分析容易发现,若 \(s=rev(s)\),则无论 \(rev(s)\) 放在前面还是后面,生成的新串都相同,只有一种情况。
相反,如果 \(s\neq rev(s)\),则一次操作后可以出现两种情况。而无论是哪种情况,生成的新串都是回文串,即 \(s'=rev(s')\),根据乘法原理,后面的情况数都是前一个情况数 \(\times 1\),也就是说都不会再增添新的情况数。
因此有结论:如果 \(s\) 回文,则最终情况数是 \(1\),否则是 \(2\)。
以及特判:\(k=0\) 时,答案为 \(1\),因为没有操作,只有一种情况。
代码:
#include<bits/stdc++.h>
using namespace std;
constexpr int N=100005;
int n,a[N];double m;
int main(){
int t;cin>>t;
while(t--){
int n,k;scanf("%d%d",&n,&k);
char s[105];scanf("%s",s+1);
bool flg=0;
for(int i=1;i<=n/2;i++)if(s[i]!=s[n-i+1]){flg=1;break;}
puts(flg&&k?"2":"1");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类