Wannafly summer camp Day2I(思维)
#include<bits/stdc++.h>
using namespace std;
int a[1000007],b[1000007],c[1000007];
int find_max(int lll,int rrr,int lenn){
int maxnn=0;
int summ=0;
for(int i=lll;i<=rrr;i++){
maxnn=max(maxnn,c[i]);
if(maxnn==lenn+i-lll)//这一段可以经过排序满足题意
summ++;
}
return summ;
}
int divide(int l,int r){
int num=1;
int len=r-l+1;
int ll=1;
for(int i=l;i<=r;i++){
c[i-l+1]=a[i]-l+1;//对于这一段进行操作,每一段的值都是l到r之间的值,全部减去l-1
}
int minn=0;
for(int i=1;i<=len;i++){
if(i==1)
minn=c[1];
else
minn=min(minn,c[i]);
if(minn==len+1-i){//这一段可以和另一半交换
if(ll==1&&i==len)
continue;//不可交换串
if(ll==1||i==len)
num=max(2,num);//至少可以分成两串
else{
int xx=find_max(ll,i,len-i+1);//边上两串交换,中间串尽可能分割
num=max(xx+2,num);
}
ll=i+1;//下一段的左端点
}
}
return num;
}
int main(){
int n,k;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%d%d",&n,&k);
int maxn=0;
int sum=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
if(maxn==i)//如果最大值和i相等,说明从上一个b[i]+1到i之间的串是可以经过排序满足题意的
b[i]=i,sum++;//如果sum已经达到k了,就无需去交换操作了
}
int ans=sum;
int flag=1;
if(ans>=k)
printf("Yes");
else{
for(int i=1;i<=n;i++){
if(b[i]==i){
int x=divide(flag,i)-1;//看看每一段中间经过交换操作能多出几段
ans=max(ans,sum+x);
flag=i+1;//下一段的左端点
}
}
if(ans>=k)
printf("Yes");
else
printf("Poor Simon");
}
return 0;
}
//通过对一段l到r的串进行构造和思考,可以发现满足题意都是l到r之间值都为l到r之间的
//一段想要通过交换得到更多段,需要把中间隔成若干尽可能多的段,两端的段交换,中间的分段,可以使段尽可能的多
Wannafly summer camp Day2I(思维)的更多相关文章
- 2019 wannafly winter camp day 3
2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉 ...
- 2019 wannafly winter camp
2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O ...
- 2020 CCPC Wannafly Winter Camp Day1 C. 染色图
2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...
- Wannafly summer camp Day6 - D 区间权值
这道题实在是不该,我在化式子的时候,多此一举,把式子进行累加,导致自己当时化的式子是错的,这样导致自己卡了很久,也没想到好的思路,赛后重新分析一波,感觉巨™简单...难受的一逼. 这道题的关键在于,W ...
- Wannafly Winter Camp 2019.Day 8 div1 I.岸边露伴的人生经验(FWT)
题目链接 \(Description\) 给定\(n\)个十维向量\(\overrightarrow{V_i}=x_1,x_2,...,x_{10}\).定义\(\overrightarrow{V}= ...
- Wannafly Winter Camp 2019.Day 8 div1 E.Souls-like Game(线段树 矩阵快速幂)
题目链接 \(998244353\)写成\(99824435\)然后调这个线段树模板1.5h= = 以后要注意常量啊啊啊 \(Description\) 每个位置有一个\(3\times3\)的矩阵, ...
- 2018 Wannafly summer camp Day8--连通块计数
连通块计数 描述 题目描述: 小 A 有一棵长的很奇怪的树,他由 n 条链和 1 个点作为根构成,第 i条链有 ai 个点,每一条链的一端都与根结点相连. 现在小 A 想知道,这棵长得奇怪的树有多少 ...
- 2018 Wannafly summer camp Day2--Utawarerumono
Utawarerumono 描述 题目描述: 算术是为数不多的会让久远感到棘手的事情.通常她会找哈克帮忙,但是哈克已经被她派去买东西了.于是她向你寻求帮助. 给出一个关于变量x,y的不定方程ax+by ...
- 2018 Wannafly summer camp Day2--New Game!
New Game! 描述 题目描述: Eagle Jump公司正在开发一款新的游戏.泷本一二三作为其员工,获得了提前试玩的机会.现在她正在试图通过一个迷宫. 这个迷宫有一些特点.为了方便描述,我们对这 ...
随机推荐
- JAVA发送手机短信
<p><span>JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 ...
- NodeJS Cross domain
跨域问题主要在header上下功夫 首先提供一个w3c的header定义 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 再提供一个网友提 ...
- AngularJs 相应回车事件
最近做项目,要用到AngularJs,之前也有用过一点点,但仅限于数据的绑定,这次项目要整个前端需要使用这个框架,可能是不熟悉的原因,感觉这代码搞起来非常的不便利,:现总结一个响应回车事件: < ...
- 仿联想商城laravel实战---2、后端页面搭建(验证码如何在页面中使用)
仿联想商城laravel实战---2.后端页面搭建(验证码如何在页面中使用) 一.总结 一句话总结: 放在img里面,img的src就是生产验证码的控制器路径: img src="/admi ...
- C++(四)— 字符串、数字翻转3种方法
1.使用algorithm中的reverse函数,string类型字符建议使用. #include <iostream> #include <string> #include ...
- node.js+express+jade系列七:富文本编辑框的使用
下载nicEdit富文本编辑框, 把nicEdit.js文件放到public/javascripts/下 新建jade文件:代码如下 doctype htmlhtml head t ...
- Abp模块分析
1.什么是模块? 模块化是一种处理复杂系统分解为更好的可管理模块的方式.模块化用来分割,组织和打包软件.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功 ...
- BEC listen and translation exercise 33
In fact, if it is a really hot day, like the sort of weather we had last summer, you are advised to ...
- kettle文件以邮件附件的形式发送报告
将从表中导出的excel文件以邮件附件的形式发送报告 step1: 导出文件file1.xls step2: add filename to result将文件添加到结果 step3: 发送邮件
- noipd2t3列队
吉老师的题还真是难呢... 正解至今不会,只会平衡树的做法 这种用平衡树上一个点表示一段区间的题还真要做做...想起来挺难受的 建n棵平衡树表示每行的m-1个元素 再建一棵平衡树维护最后一列 中间要支 ...