没有参加,但是之后几天打了哦,第三场AK的CF比赛。

CF大扫荡计划正在稳步进行。

【A】Olympiad

题意:

给\(n\)个人颁奖,要满足:

至少有一个人拿奖。

如果得分为\(x\)的有奖,那么任意得分大于\(x\)必须拿奖。

得分为\(0\)的人不能拿奖。

每个人的得分\(0\le x\le 600\),问有多少种颁奖方式?

题解:

本质上,问题可以转化为有多少种不同的得分。于是开一个桶做。

#include<cstdio>
int n,x,cnt[601],ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&x), cnt[x]++;
for(int i=1;i<=600;++i) if(cnt[i]) ++ans;
printf("%d",ans);
return 0;
}

【B】Vile Grasshoppers

题意:

松树上共有\(y\)根树枝,从低到高第\(2\)到第\(p\)个树枝都有一只蚱蜢,已知在树枝\(x\)的蚱蜢可以跳到\(2x,3x,4x,\cdots\)树枝上。

你要选取最高的树枝,使得没有蚱蜢能跳到这根树枝上。输出树枝编号。

题解:

本质上是\([1,y]\)中最大的不能被\([2,p]\)范围整除的数,倒序遍历,每一个暴力\(\sqrt{x}\)check,因为质数很多,所以很快。

#include<cstdio>
int p,y;
int main(){
scanf("%d%d",&p,&y);
for(int i=y;i>p;--i){
for(int j=2;j<=p&&j*j<=i;++j) if(i%j==0) goto no;
printf("%d",i); return 0;
no: continue;
} puts("-1");
return 0;
}

【C】Save Energy!

题意:

Julia要煮一只鸡。她厨房的炉子为了节能,开启后\(k\)分钟就会关掉。

Julia每\(d\)分钟会去厨房一次,如果炉子关了,她会把它打开。

如果炉子开着,需要\(t\)分钟煮好,关着则需要\(2t\)分钟。

问几分钟煮好?

题解:

算出周期,直接算答案,做一点数学,不难。

[详细解释] 炉子开着,每分钟煮\(\frac{1}{t}\),关着则煮\(\frac{1}{2t}\)。

那么令总进度为\(2t\),开着每分钟进度\(+2\),关着则\(+1\)。

一个周期必定是开始炉子开着,然后炉子关上,周期长度显然是\(\left\lceil\frac{k}{d}\right\rceil\cdot d\)。

这么一算,一除,一分类讨论,就差不多了。

#include<cstdio>
long long k,d,t,lp,t1,t2;
double ans;
int main(){
scanf("%lld%lld%lld",&k,&d,&t); t<<=1;
lp=(k-1)/d*d+d; t1=k<<1, t2=lp-k;
ans=t/(t1+t2)*lp; t%=t1+t2;
if(t<=t1) ans+=(double)t/t1*k;
else ans+=k+(double)(t-t1)/t2*(lp-k);
printf("%lf",ans);
return 0;
}

【D】Sleepy Game

题意:

俩人玩博弈游戏,可是这不是博弈题,因为其中一个人睡着了。

那么身为另一个人,他可以代替另一个人以达到对自己的最优结果。

总之,在一个有\(n\)个点,\(m\)条边的有向图中,从一个初始位置\(s\)沿着边走到其他点,无法移动者输掉游戏。

问能否能赢,如果能,输出方案,如果不能,判断能否至少平局(在任意多步后都无法结束游戏)。

题解:

本质上,赢的条件是存在从\(s\)到任意一个出度为\(0\)的点的路径长度为偶数,可以重复走。

而平局则是从\(s\)能走到一个环,都不行则输了。

这题坑了我很久,接下来解释一下做法。

①判断能否赢:从\(s\)开始DFS,每个点存储能否从\(s\)到它有偶数或奇数的路径(有可能既有偶数也有奇数)。

 DFS函数需要两个参数\(DFS(u,c)\),\(c\)相当于起点到它的步数的奇偶性。这样如果能到一个出度为\(0\)的点并且\(c=0\),则有解。

②判环:直接Tarjan版判环。

可以巧妙地把2个DFS合到一起。

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,o,v[2][100001],k[2][100001],t[2][100001];
vector<int> h[100005];
bool D(int u,bool c){
if(~k[c][u]) return k[c][u];
if(!h[u].size()) return k[c][u]=c;
v[c][u]=1;
for(int i:h[u]) {if(v[c][i]||v[!c][i]) o=1; if(!v[!c][i]&&D(i,!c)) return t[c][u]=i, v[c][u]=0, k[c][u]=1;}
return v[c][u]=0, k[c][u]=0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&x);
while(x--) scanf("%d",&y), h[i].push_back(y);
} scanf("%d",&x);
memset(k,-1,sizeof k);
if(D(x,0)){
puts("Win"); y=1;
while(x) printf("%d ",x), x=t[y=!y][x];
return 0;
} puts(o?"Draw":"Lose");
return 0;
}

【E】Lock Puzzle

题意:

对于一个字符串\(\alpha\beta\),你可以通过一次操作把它变成\(\beta^R\alpha\),这里的\(x^R\)表示字符串\(x\)的倒序。

这里的\(\beta\)的长度可以任意选择。

给定一个长为\(n\)的字符串\(s\),和等长的字符串\(t\)。

问如何在\(3n+100\)的操作内把\(s\)变成\(t\)。无解输出\(-1\)。

题解:

如果\(s\)和\(t\)中有一个字母的出现次数不同,则显然无解。

而其他情况都能在\(3n\)步内完成,如下:

假设已有一个字符串\(\alpha\)的前缀是\(t\)的后缀,而紧跟着\(\alpha\)是一个需要放到\(\alpha\)前面的字符,那么我们经过3步可以把\(x\)放到\(\alpha\)前面:

\(\underline{\alpha x\beta}\\\beta^Rx\underline{\alpha^R}\\\alpha\beta^R\underline{x}\\x\alpha\beta^R\)

其中下划线是操作的\(\beta\)字符串。

那么做\(n\)遍这个操作,可以在\(3n\)步之内完成。

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=(b);++i)
#define dF(i,a,b) for(int i=a;i>=(b);--i)
using namespace std; int n;
char str1[2005],str2[2005],str3[2005],str4[2005]; int main(){
scanf("%d%s%s",&n,str1+1,str2+1);
memcpy(str3+1,str1+1,n);
memcpy(str4+1,str2+1,n);
sort(str3+1,str3+n+1);
sort(str4+1,str4+n+1);
if(memcmp(str3+1,str4+1,n)) {puts("-1"); return 0;}
printf("%d\n",n*3);
dF(i,n,1){
int p;
F(j,n-i+1,n) if(str1[j]==str2[i]) {p=j; break;}
printf("%d %d 1 ",n,p-1);
reverse(str1+p+1,str1+n+1);
memcpy(str1+2,str1+1,p-1);
str1[1]=str2[i];
}
return 0;
}

【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)的更多相关文章

  1. Codeforces Round #467 (div.2)

    Codeforces Round #467 (div.2) 我才不会打这种比赛呢 (其实本来打算打的) 谁叫它推迟到了\(00:05\) 我爱睡觉 题解 A. Olympiad 翻译 给你若干人的成绩 ...

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

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

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

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

  4. CF Round #510 (Div. 2)

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

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

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

  6. cf Round#273 Div.2

    题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...

  7. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

  8. 【codeforces】【比赛题解】#869 CF Round #439 (Div.2)

    良心赛,虽然我迟了半小时233333. 比赛链接:#869. 呃,CF的比赛都是有背景的……上次是<哈利波特>,这次是<物语>…… [A]巧妙的替换 题意: Karen发现了石 ...

  9. 【codeforces】【比赛题解】#868 CF Round #438 (Div.1+Div.2)

    这次是Div.1+Div.2,所以有7题. 因为时间较早,而且正好赶上训练,所以机房开黑做. 然而我们都只做了3题.:(. 链接. [A]声控解锁 题意: Arkady的宠物狗Mu-mu有一只手机.它 ...

随机推荐

  1. Nim游戏学习笔记

  2. D-query SPOJ - DQUERY(模板莫队)

    题意: 给定一个序列,询问m次,每次求出区间 [ L,R ] 有多少个不同数字. 套模板就好了...但我不大明白....我的写法为什么不行...唉... #include <iostream&g ...

  3. Alpha 冲刺 —— 十分之九

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...

  4. phpmyadmin 配置方法

    几乎所有的配置参数都在 config.inc.php 文件中.如果这个文件不存在,您可以在 libraries 目录中找到 config.default.php,将它复制到根目录,并改名为 confi ...

  5. maven管理工具

    Maven解决的问题: 1. 使用maven前搭建项目需要引入各种jar包,并且还可能有jar包冲突的问题 解决jar包冲突的方式: 1. 第一声明优先原则 2. 路径近者优先原则. 直接依赖路径比传 ...

  6. Java EE之通过表单上传文件

    public class Ticket { private String customerName; private String subject; private String body; priv ...

  7. day6-python基础

  8. MySQL 第五篇:索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  9. 实验四:终极改造之使用EF

    回顾一下我们前面经过改造后的程序代码: (1)Listing.aspx:负责将Product对象集合(产品集合)按要求显示出来 (2)Repository.cs:负责读将数据库中读到的数据转换成Pro ...

  10. Java入门:注册模块的实现

    1.主活动图 用户选择注册选项,进入注册界面,开始输入注册信息,到最后完成注册.具体的活动图如下: 以上活动图中,矩形框里的操作不是在一个类里面实现的,而是通过Form类和UserService类来实 ...