cf round#598 CDEF
C:模拟:未跳到目的地之前先贪心放板子,能到达目的地后紧贴着放板子
先判能不能跳到目的地,能跳到再考虑是否需要将后面的板子往前移动
#include<bits/stdc++.h>
using namespace std;
#define N 20005 int sum,n,m,d,c[N],ans[N],ans1[N]; int main(){
cin>>n>>m>>d;
for(int i=;i<=m;i++)cin>>c[i],sum+=c[i]; if(sum>n){puts("NO");return ;} int pos=,id,R=;
for(id=;id<=m;id++){
if(pos+d>=n+){//直接贴着放板子即可
for(int i=R+;i<=R+c[id];i++)
ans[i]=id;
R+=c[id];
}
else {//贪心放板子
pos+=d;//跳到pos+d去
for(int i=pos;i<=pos+c[id]-;i++)
ans[i]=id;
pos+=c[id]-;
R=pos;
}
} if(pos+d<n+){puts("NO");return ;}
if(pos+d>=n+ && R<=n){
puts("YES");
for(int i=;i<=n;i++)
cout<<ans[i]<<" ";
return ;
} int ind=n;
for(int i=R;i>=;i--){
ind=min(ind,i);
if(ans[i]){
ans1[ind]=ans[i];
ind--;
}
}
puts("YES");
for(int i=;i<=n;i++)
cout<<ans1[i]<<" ";
return ;
}
D:贪心往前移动0即可,注意k是long long
#include<bits/stdc++.h>
using namespace std;
#define N 1000006
#define ll long long
long long n,k;
char s[N]; int main(){
int q;cin>>q;
while(q--){
scanf("%lld%lld",&n,&k);
scanf("%s",s+); ll tot=,len=;
for(int i=;i<=n;i++){
if(s[i]==''){
tot++;
}
else {
if(tot<=k){
k-=tot;
++len;
swap(s[i],s[len]);
}
else {//只能往前移动k格
swap(s[i],s[i-k]);
break;
}
}
} printf("%s\n",s+);
} }
E:贪心,肯定是分队伍越多越好,六个人的队显然没有两只三人队优
先排序,dp[i]表示取前i人的最优解,
枚举3<=j<=5,dp[i]=min(dp[i-j]+a[i]-a[i-j+1]);
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200005 struct Node{
ll id,a;
}p[N];
ll n,ans[N],dp[N],pre[N];
int cmp(Node a,Node b){
return a.a<b.a;
} int main(){
cin>>n;
for(int i=;i<=n;i++){
cin>>p[i].a;
p[i].id=i;
}
sort(p+,p++n,cmp); dp[]=p[].a-p[].a;
pre[]=;
dp[]=p[].a-p[].a;
pre[]=;
dp[]=p[].a-p[].a;
pre[]=;
for(int i=;i<=n;i++){
dp[i]=dp[i-]+p[i].a-p[i-].a;
pre[i]=i-;
for(int j=;j<=;j++){
if(i-j<)continue;
if(dp[i]>dp[i-j]+p[i].a-p[i-j+].a){
dp[i]=dp[i-j]+p[i].a-p[i-j+].a;
pre[i]=i-j;
}
}
} cout<<dp[n]<<' ';
int pos=n,now=;
while(pos){
++now;
int tmp=pre[pos];
for(int i=tmp+;i<=pos;i++)
ans[p[i].id]=now;
pos=tmp;
}
cout<<now<<'\n';
for(int i=;i<=n;i++)cout<<ans[i]<<' ';
}
F:将一长段逆转转换成每次只逆转相邻两个字符,如果字符集不同,显然不行
字符集相同:分成两种情况:
1,某种字符出现>=2次,那么这种情况必然有解:先将这两个字符挨在一起,然后就可以随便搞了
2,每种字符出现1次,那么求出s转换成t的步数,偶数有解,奇数无解
#include<bits/stdc++.h>
using namespace std;
#define N 200005 char s[N],t[N];
int n,cnt1[],cnt2[],pos1[],pos2[]; int main(){
int T;cin>>T;
while(T--){
for(int i=;i<;i++)
cnt1[i]=cnt2[i]=pos1[i]=pos2[i]=; cin>>n;
cin>>s>>t;
for(int i=;i<n;i++)
cnt1[s[i]-'a']++,cnt2[t[i]-'a']++; int flag=;
for(int i=;i<;i++)
if(cnt1[i]!=cnt2[i])
flag=;
if(flag){puts("NO");continue;} flag=;
for(int i=;i<;i++)
if(cnt1[i]>=)
flag=;
if(flag){puts("YES");continue;} int sum=;
for(int i=;i<n;i++){
int pos=i;
while(s[pos]!=t[i])pos++;
for(int j=pos;j>i;j--){
swap(s[j],s[j-]);
sum++;
}
} if(sum%==)cout<<"YES\n";
else puts("NO");
}
}
cf round#598 CDEF的更多相关文章
- CF Round #551 (Div. 2) D
CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...
- CF Round #510 (Div. 2)
前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...
- UOJ #30. [CF Round #278] Tourists
UOJ #30. [CF Round #278] Tourists 题目大意 : 有一张 \(n\) 个点, \(m\) 条边的无向图,每一个点有一个点权 \(a_i\) ,你需要支持两种操作,第一种 ...
- 竞赛题解 - CF Round #524 Div.2
CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...
- 【前行&赛时总结】◇第4站&赛时9◇ CF Round 513 Div1+Div2
◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打 ...
- CF Round #600 (Div 2) 解题报告(A~E)
CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...
- Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划
Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划 [Problem Description] 给你\( ...
- CF Round #580(div2)题解报告
CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...
- CF round #622 (div2)
CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...
随机推荐
- sql语句中取整数和小数部分
sql 取整数去小数点 ,) ' Sql截取浮点小数位数,不四舍五入 ,) 结果:551.24 ,) 结果:551.23 第一个2表示截取2位 第二个0,1分别表示0是四舍五入,0以外是截取 如何分别 ...
- BZOJ 2741: 【FOTILE模拟赛】L(可持久化Trie+分块)
传送门 解题思路 首先求出前缀异或和,那么问题就转化成了区间内选两个数使得其异或和最大.数据范围不是很大考虑分块,设\(f[x][i]\)表示第\(x\)块开头到\(i\)这个位置与\(a[i]\)异 ...
- LOJ 2719 「NOI2018」冒泡排序——模型转化
题目:https://loj.ac/problem/2719 首先要发现合法的充要条件是 | LDS | <=2 ! 因为有没用的步数,说明一个元素先往左移.又往右移(不会先往右移再往左移,因为 ...
- PyQuery爬取历史天气信息
1.准备工作: 网址:https://lishi.tianqi.com/xian/index.html 爬虫类库:PyQuery,requests 2.网页分析: 红线部分可更改为需要爬取的城市名,如 ...
- soj#551 loj#2833 帐篷
传送门 分析 dp[i][j]表示考虑了i行j列的方案数 我们每次考虑三种情况: 一个点自己放 两个点在同一行 两个点在同一列 代码 #include<bits/stdc++.h> usi ...
- spring cloud gateway 拦截request Body
在接入Spring-Cloud-Gateway时,可能有需求进行缓存Json-Body数据或者Form-Urlencoded数据的情况. 由于Spring-Cloud-Gateway是以WebFlux ...
- vue filters 金额转中文大写
capitalAmount(amount: any) { // 汉字的数字 const cnNums = ["零", "壹 ...
- javascript: 禁用右键、文本选择功能、复制按键
<script type="text/javascript"> //禁用右键.文本选择功能.复制按键 //http://www.jinyuanbao.cn $(docu ...
- spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
------配置嵌入式servlet容器------ springboot 默认使用的是嵌入的Servlet(tomcat)容器 问题? 1)如何定制修改Servlet容器的相关配置: 1.修改和se ...
- webservice 学习笔记 1
Webservice----------->跨语言服务调用 (视频学习总结) 1-1.有OA系统 需要添加一个功能,登录之后显示天气情况 此时可以使用Webservice eg1: 气象局自己有 ...