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. Android内存tips

    1. Android应用程序的默认最大内存值为16M,如何修改Android应用程序的默认最大内存值? 修改或添加/system/build.prop中的配置项: root@NX551J:/syste ...

  2. Python中的时间模块和日期模块

    Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间 ...

  3. window 2008/2012计划任务配置

    很多人在问我: 1.Windows Server 2008 计划任务在哪里配置? 2.Windows Server 2008 可以配置每分钟或是每小时执行我的任务吗? 答案是:可以! 首先Window ...

  4. [CSP-S模拟测试]:次芝麻(数学)

    题目描述 小$K$和小$X$都是小次货.身为小次货,最重要的事情就是次啦!所以他们正在纠结如何分芝麻次.一开始,小$K$有$n$个芝麻,小$X$有$m$个芝麻.因为他们都想次更多芝麻,所以每次手中芝麻 ...

  5. [CSP-S模拟测试]:密州盛宴(贪心)

    江城子·密州出猎老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈.为报倾城随太守,亲射虎,看孙郎.酒酣胸胆尚开张,鬓微霜,又何妨!持节云中,何日遣冯唐?会挽雕弓如满月,西北望,射天狼.(这首词通过 ...

  6. 源码分析笔记Vector

    概述 继承抽象类AbStractList,实现接口List.RandomAccess.Cloneable以及序列化接口默认容量大小为10,扩容增量为0,扩容为原容量的2倍如设置的增量大于0,则扩容为( ...

  7. python最近邻分类器KNN算法

    1. KNN算法 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最 ...

  8. net core配置log4net需要注意的地方

    和netframework不一样的是,netcore 没有assembly文件.所以配置的时候需要注意: 1.配置文件可以没有 <configSections> <section n ...

  9. jQuery判断checkbox是否选中及获取选中值

    方法一:if ($("#checkbox-id")get(0).checked) {    // do something} 方法二:if($('#checkbox-id').is ...

  10. 页面跳转到Area区域连接

    @Html.ActionLink("主页", "Index", new { controller = "Test", Action = &q ...