贪心+二分答案

二分最终答案长度

主要问题在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 ;
}

最新文章

  1. Thinking in Java——笔记(13)
  2. 【Remoting】.Net remoting方法实现简单的在线升级(下篇:重启exe)
  3. Nginx(PHP/fastcgi)的PATH_INFO问题
  4. codeforces 70D Professor&#39;s task(动态二维凸包)
  5. 构建本地yum源之rpmbuild问题汇总
  6. C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库
  7. python总结
  8. php管理关系工具Composer 之安装与下载
  9. TypeScript入门知识二(参数新特性)
  10. python模块安装
  11. jvm比较详尽的内存结构
  12. ASP.NET Core 项目配置 ( Startup )(转载)
  13. WCF和委托
  14. Golang 入门系列(七) Redis的使用
  15. Fiddler抓包学习
  16. 深入浅出Tomcat/4 - Tomcat容器
  17. NB-Iot的应用领域、覆盖范围,是什么
  18. (转)理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow
  19. MyEclipse 2017 CI 9 发布(附下载)
  20. javascript变量声明前置

热门文章

  1. python round, ceil, flooor
  2. SQL语句增加列、修改列、删除列
  3. 创建第一个spirngmvc小项目
  4. svn更新的时候断电,下次在更新出现svn: sqlite: database disk image is malformed
  5. Spring Boot集成Shiro实战
  6. 通过Python SDK 获取tushare数据
  7. 27-Ubuntu-远程管理命令-01-关机和重启
  8. 牛客D-Where are you /// kruskal+tarjan找无向图内的环
  9. centOs 查看系统cpu使用率等--top
  10. Xpath-Assertion断言