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的更多相关文章

  1. CF Round #551 (Div. 2) D

    CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...

  2. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  3. UOJ #30. [CF Round #278] Tourists

    UOJ #30. [CF Round #278] Tourists 题目大意 : 有一张 \(n\) 个点, \(m\) 条边的无向图,每一个点有一个点权 \(a_i\) ,你需要支持两种操作,第一种 ...

  4. 竞赛题解 - CF Round #524 Div.2

    CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...

  5. 【前行&赛时总结】◇第4站&赛时9◇ CF Round 513 Div1+Div2

    ◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打 ...

  6. CF Round #600 (Div 2) 解题报告(A~E)

    CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...

  7. Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划

    Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划 [Problem Description] 给你\( ...

  8. CF Round #580(div2)题解报告

    CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...

  9. CF round #622 (div2)

    CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...

随机推荐

  1. sql200安装问题

    解决方法: 首先把安装目录和C:\Program Files下的Microsoft SQL Server文件夹删了,删除在current_user和local_machine\software\mic ...

  2. tarjan-LCA模板

    洛谷P3379 #include <cstdio> using namespace std; ; struct etype{ int t,next; }; struct qtype{ in ...

  3. Python操作 Memcache

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据 库驱动网站的速 ...

  4. flex布局滚动问题,子元素无法全部显示的解决办法

    flex布局使用起来非常方便,对于水平垂直居中的需求,很容易就能实现.但是前不久,在做全屏弹窗遮罩登录的时候,遇到了flex布局滚动的一个问题,在此记录一下. 问题重现 理想情况下,当然是下面的状态, ...

  5. 【Java架构:持续交付】一篇文章搞掂:持续交付理论

    一.持续集成.持续交付.DevOps概念,关系等 持续集成(Continuous integration/CI) 持续交付(Continuous delivery/CD) 持续部署() 持续 (Con ...

  6. 请教怎么查询ORACLE的历史操作记录!

    请问如何查询ORACLE的历史操作记录!!!!!我用的是linux oracle 11g r2,想查一下前几天的数据库的历史操作记录,例如对表的insert,delete,update等等的操作记录, ...

  7. php开发面试题---日常面试题1

    php开发面试题---日常面试题1 一.总结 一句话总结: 实战确定学习方向,然后去网上找视频资源,非常多,然后看书 1.什么样的数据存在memcache里面? 要去数据库里面查询的那些数据,数据库查 ...

  8. git分支回退以及目录回退

    分支回退 git checkout - 目录回退 cd -

  9. qbxt Day3 on 2019-8-18

    qbxt Day3 on 2019-8-18 一.基础数论 1.进制转换 进制转换是一个非常简单且基础的问题. 也许我们只需要...Emmm... 列个式子就好了鸭 设\(k\)进制数每一位上是\(a ...

  10. 建站手册-网站建设:Web 安全

    ylbtech-建站手册-网站建设:Web 安全 1.返回顶部 1. http://www.w3school.com.cn/site/site_security.asp 2. 2.返回顶部 1. 此刻 ...