没有参加,但是之后几天打了哦,第三场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;
}

转载于:https://www.cnblogs.com/PinkRabbit/p/8490643.html

【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)相关推荐

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

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

  2. 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

    cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...

  3. 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)

    剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...

  4. 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)

    cf真的难-- 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来. 在时 ...

  5. 【codeforces】【比赛题解】#862 CF Round #435 (Div.2)

    这次比赛打得很舒服,莫名得了个Rank41,涨了219的Rating,就比较优秀.不过还是没有闫神厉害啊. 题目链接::P. [A]MEX 题意: Evil博士把Mahmoud和Ehab绑架到了邪恶之 ...

  6. 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)

    人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...

  7. 【codeforces】【比赛题解】#872 CF Round #440 (Div.2)

    链接. [A]寻找漂亮数字 题意: 给定了两列非零数字. 我们说一个数是漂亮的,当它的十进制表达中有至少一个数从数列一中取出,至少有一个数从数列二中取出. 最小的漂亮数字是多少? 输入: 第一行两个数 ...

  8. CF Round #681(Div.2)/CF1443 口胡题解

    由于一些原因(时间),本蒟蒻决定口胡这场比赛. 下面的题解纯口胡,但是与题解中的解法基本相同. Solution A 答案就是2n+2,2n+4,2n+6--4n2n+2, 2n+4, 2n+6--4 ...

  9. Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)

    题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...

最新文章

  1. Google出品,EfficientNet在目标检测达到最新SOTA | CVPR 2020
  2. 6.3文件传输协议FTP
  3. SpringMVC入门案例
  4. Understand one Simple Factory Pattern
  5. 【必看】CCNA初学者必看的一篇文章
  6. 哪里的草莓质量又好又便宜呢?水果批发市场(前提你买的得多)
  7. powerdns mysql_安装PowerDNS(使用MySQL后端)和Poweradmin在Debian Lenny
  8. wifi信号增强android,WiFi信号增强大师APP
  9. python实例化是什么意思_Python中实例化class的执行顺序示例详解
  10. golang time包梳理
  11. 大坑!有网,电脑qq登不上去!!
  12. 【Android】Fresco图片加载框架(二)————Producer
  13. 如何搭建VUE环境?
  14. 计算机应用技术专业考试试题,全国专业技术人员计算机应用能力考试模拟试题笔试题.docx...
  15. sublime连接Linux进行vim编辑
  16. [渝粤教育] 西南科技大学 现代制造系统 在线考试复习资料2021版
  17. 1091 Acute Stroke (30 分)广度优先搜索,用queue,重写一遍
  18. echarts快速实现迁徙地图
  19. 威伦触摸屏入门布局提升题
  20. 一款三搭_今秋内搭无需多,有“小高领”就够了!时髦百搭,配啥上衣都好看...

热门文章

  1. python 取余_Python-基本使用
  2. airplay服务器linux,在Linux实现airplay
  3. c++窗口管理系统是什么_维维华东食品饮料公司电能管理系统的设计与应用——安科瑞 戴玥...
  4. linux脚本自动修改网卡,Linux脚本程序自动修改网卡配置文件中的MAC地址
  5. 带有控制器,方法,标题,参数,@ RequestParam,@ PathVariable的Spring MVC @RequestMapping注释示例
  6. 计算器的二进制功能java_Java二进制文字– Java 7功能
  7. angularjs 实例_AngularJS包含示例教程
  8. 输出文件名,用i迭代的时候的方法
  9. 打开word时总是弹出The resource dll can not be loaded
  10. C++是C语言演变过来的,为何不能代替C语言?