P3718 [AHOI2017初中组]alter
2024-09-06 07:04:28
贪心+二分答案
二分最终答案长度
主要问题在check上
~~我代码写得巨丑,大家还是不要看我的代码了~~
------------
1:当mid大于1的时候,贪心策略是这样的:
当前连续的长度大于mid时,我不反转最后一个,我也不管它具体反转哪一个,我直接跳过这mid+1个,也就是开始处理i+1。举个例子,
mid=3,k=1,NNNNNNN,我反转第4个,变成NNNFNNN
mid=3,k=1,NNNNFFF,我反转前3个的任意一个
不管怎么反转,前4个对后面是没有影响了,那我就不用管具体怎么反转的
2:当mid等于1的时候,贪心策略是这样的:
跑两遍check,反转第一个,或者不反转第一个,两种情况有一个能行就ok
------------
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cstring>
#define inf 2147483647
#define N 1000010
#define p(a) putchar(a)
#define For(i,a,b) for(int i=a;i<=b;++i)
//by war
//2019.8.13
using namespace std;
int n,k,l,r,mid,a[N],cnt,now;
char c[N];
void in(int &x){
int y=;char c=getchar();x=;
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c<=''&&c>=''){ x=(x<<)+(x<<)+c-'';c=getchar();}
x*=y;
}
void o(int x){
if(x<){p('-');x=-x;}
if(x>)o(x/);
p(x%+'');
} bool check1(int x,int t){
int lf=k-;
For(i,,n)
if(c[i]=='N')
a[i]=;
else
a[i]=;
cnt=;now=t;
For(i,,n){
if(a[i]==now){
++cnt;
if(cnt>x){
a[i]^=;
if(x!=){
now=a[i+];
cnt=;
}
else{
now=a[i];
cnt=;
}
if(--lf<)
return ;
}
}
else{
now=a[i];
cnt=;
}
}
return ;
} bool check(int x){
int lf=k;
For(i,,n)
if(c[i]=='N')
a[i]=;
else
a[i]=;
cnt=;now=a[];
For(i,,n){
if(a[i]==now){
++cnt;
if(cnt>x){
a[i]^=;
if(x!=){
now=a[i+];
cnt=;
}
else{
now=a[i];
cnt=;
}
if(--lf<){
if(x==){
if(check1(x,a[]^))
return ;
return ;
}
return ;
}
}
}
else{
now=a[i];
cnt=;
}
}
return ;
} signed main(){
in(n);in(k);
cin>>(c+);
l=;r=n;
while(l<r){
mid=(l+r)>>;
if(check(mid))
r=mid;
else
l=mid+;
}
o(l);
return ;
}
最新文章
- Thinking in Java——笔记(13)
- 【Remoting】.Net remoting方法实现简单的在线升级(下篇:重启exe)
- Nginx(PHP/fastcgi)的PATH_INFO问题
- codeforces 70D Professor&#39;s task(动态二维凸包)
- 构建本地yum源之rpmbuild问题汇总
- C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库
- python总结
- php管理关系工具Composer 之安装与下载
- TypeScript入门知识二(参数新特性)
- python模块安装
- jvm比较详尽的内存结构
- ASP.NET Core 项目配置 ( Startup )(转载)
- WCF和委托
- Golang 入门系列(七) Redis的使用
- Fiddler抓包学习
- 深入浅出Tomcat/4 - Tomcat容器
- NB-Iot的应用领域、覆盖范围,是什么
- (转)理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow
- MyEclipse 2017 CI 9 发布(附下载)
- javascript变量声明前置
热门文章
- python round, ceil, flooor
- SQL语句增加列、修改列、删除列
- 创建第一个spirngmvc小项目
- svn更新的时候断电,下次在更新出现svn: sqlite: database disk image is malformed
- Spring Boot集成Shiro实战
- 通过Python SDK 获取tushare数据
- 27-Ubuntu-远程管理命令-01-关机和重启
- 牛客D-Where are you /// kruskal+tarjan找无向图内的环
- centOs 查看系统cpu使用率等--top
- Xpath-Assertion断言