CF 1178E Archaeology 题解
2024-10-07 03:50:26
这道题竟然是E?还是洛谷中的黑题?
wow~!!
于是就做了一下;
然后一下就A了;(这并不代表想的容易,而是写的容易)
这道题就是骗人的!!
什么manacher,什么回文自动机,去靠一边站着,看我的无敌大模拟!
可以设定l,r两个点,初始时分别指向1和n;
如果是s[l]==s[r],那么答案就更新(ans+=2,但当l==r时,ans仅加1就够了);
如果不等,那么就回文自动......诶?等等,题目说只有a,b,c?而且相邻的两位不等?蛤?这是什么情况?
如果s[i]!=s[j],因为s[j-1]!=s[j],s[i+1]!=s[i],所以至少就是以下几种情况中的一种,s[i+1]==s[j],s[i]==s[j-1],s[i+1]==s[j-1];
然后对其模拟,然后就轻松愉快的A啦~
#include <bits/stdc++.h>
using namespace std;
int n;
char s[];
bool bo[];
int cnt;
int main() {
scanf("%s", s + );
int l=,r=;
n=r=strlen(s + );
while(l <= r){
if(s[l] == s[r]){
bo[l] = bo[r] = ;
cnt+=;
if(l==r){
--cnt;
}
++l;
--r;
}
else if(l+<=r&&s[l+]==s[r]){
bo[l+]=bo[r]=;
cnt+=+(l+!=r);
l+=, --r;
}
else if (l<=r-&&s[l]==s[r-]){
bo[l]=bo[r-]=;
cnt+=+(l!=r-);
++l, r-=;
}
else{
++l, --r;
}
}
if(cnt>=n/){
for(int i=;i<=n;i++){
if(bo[i]){
printf("%c",s[i]);
}
}
puts("");
}
else{
puts("IMPOSSIBLE");
}
return ;
}
最新文章
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2
- Sprint1(第七天11.20)
- 《Unix网络编程 卷I》思维导图
- 1.python基础入门
- Winform窗口弹出位置控制
- lubuntu12.11 source.list
- shell编程笔记(基本部分)
- Model-View-Presenter(MVP)
- 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上)
- MFC下对串口的操作以及定时器的调用
- Swift语言中与C/C++和Java不同的语法(三)
- kubernetes实践之一:kubernetes二进制包安装
- [BZOJ 1095] [ZJOI 2007] 捉迷藏
- Mongodb 集群实战
- 4星|《门口的野蛮人2》:美国宝万之争专业户KKR公司的疯狂借债收购史
- Web项目开发流程 PC端
- [wx]自然数学规律
- Linux配置python和pip环境
- 代码生成器 CodeSmith 的使用(三)
- jar 包和 mysql 服务器部署