码迷,mamicode.com
首页 > 编程语言 > 详细

【暑期集训第一场】欧拉回路 | 思维 | 数论构造 | 容斥原理 | 线段树 | 归并排序

时间:2019-08-06 23:58:39      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:test   答案   这一   tab   contest   pre   ref   scan   str   


集训1(HDU2018 Multi-University Training Contest 2)


ID A B C D E F G H I J
AC O O
补题 ? O ? O


代码 & 简易题解


[A]:期望?

神仙题,留坑..


[B]:??

\(\text{A}\)


[C]:求欧拉通路条数,以及每条的路径

小学数竞里有讲过,无向图一笔画的充要条件是有零个或两个“奇点”(偶点个数不限),“奇点”在这里就是指度为奇数的点...

其实上面两种情况就分别对应着欧拉回路和欧拉通路,并且如果把两个奇点连起来的话欧拉通路就变成欧拉回路了。

于是我们考虑本题应该也可利用这种思路。对于至少有 \(2\) 个点的无向连通块,如果它有 \(2*k\) 个奇点(注意奇点必有偶数个,因为每条边可看做贡献了两个度,所以总度应该是偶数,而偶点不管有多少个他们的总度都是偶数,所以奇点的总度也应该也是偶的,所以奇点就必须有偶数个),那么我们把这 \(2*k\) 个奇点任意两两连接就可以使这个连通块不含任何奇点,也就成为一个欧拉回路了。找到欧拉回路后,再断掉这 \(k\) 条新增的边,就得到 \(k\) 段欧拉通路,也就得解了。

当然,如果这个连通块只有一个点,那就特判一下,此时不存在欧拉通路。


\(\text{AC}\) 代码:


[D]:思维

两个人玩游戏,轮流每次从 \(\{1, 2, 3, ..., n\}\) 的集合中选一个数,然后把集合中存在的这个数的所有因子剔除(包括自身),如果某个人无法再操作(面对?)则输掉游戏,问是否先手必胜?

答案是肯定的。若 \(n==1\),那显然先手必胜。若 \(n>1\),先考虑 \(\{2, 3, ..., n\}\),如果面对这一批后手有必胜策略,则加上 \(1\) 之后先手者第一步拿 \(1\),那么就先手必胜了;而如果先手者对 \(\{2, 3, ..., n\}\) 已经有必胜策略,那么算上 \(1\) 后还是按原来必胜策略来即可必胜,因为先手者不管拿什么非 \(1\) 都会拿走 \(1\)

\(\text{AC}\) 代码(C):

main(){while(~scanf("%*d"))puts("Yes");}


[E]:数论构造

\(\text{AC}\) 代码:


[F]:容斥




[G]:线段树


[J]:思维+归并排序


补题方案

  • E、G 较简单,赛后应马上补上。

  • C、F 属于常见知识点,也应尽快补上。

  • 其余神仙题...待进一步提升实力后再回来填坑吧QAq


总结

  • 死磕没有结果时,应该去跟榜...


实在是菜的一笔>A<
好好补题吧


集训1(HDU2018 Multi-University Training Contest 2)


ID A B C D E F G H I J
AC O O
补题 ? O ? O


代码 & 简易题解


[A]:期望?

神仙题,留坑..


[B]:??

\(\text{A}\)


[C]:求欧拉通路条数,以及每条的路径

小学数竞里有讲过,无向图一笔画的充要条件是有零个或两个“奇点”(偶点个数不限),“奇点”在这里就是指度为奇数的点...

其实上面两种情况就分别对应着欧拉回路和欧拉通路,并且如果把两个奇点连起来的话欧拉通路就变成欧拉回路了。

于是我们考虑本题应该也可利用这种思路。对于至少有 \(2\) 个点的无向连通块,如果它有 \(2*k\) 个奇点(注意奇点必有偶数个,因为每条边可看做贡献了两个度,所以总度应该是偶数,而偶点不管有多少个他们的总度都是偶数,所以奇点的总度也应该也是偶的,所以奇点就必须有偶数个),那么我们把这 \(2*k\) 个奇点任意两两连接就可以使这个连通块不含任何奇点,也就成为一个欧拉回路了。找到欧拉回路后,再断掉这 \(k\) 条新增的边,就得到 \(k\) 段欧拉通路,也就得解了。

当然,如果这个连通块只有一个点,那就特判一下,此时不存在欧拉通路。


\(\text{AC}\) 代码:


[D]:思维

两个人玩游戏,轮流每次从 \(\{1, 2, 3, ..., n\}\) 的集合中选一个数,然后把集合中存在的这个数的所有因子剔除(包括自身),如果某个人无法再操作(面对?)则输掉游戏,问是否先手必胜?

答案是肯定的。若 \(n==1\),那显然先手必胜。若 \(n>1\),先考虑 \(\{2, 3, ..., n\}\),如果面对这一批后手有必胜策略,则加上 \(1\) 之后先手者第一步拿 \(1\),那么就先手必胜了;而如果先手者对 \(\{2, 3, ..., n\}\) 已经有必胜策略,那么算上 \(1\) 也不造成任何影响,因为先手者不管拿什么都会拿走 \(1\)

\(\text{AC}\) 代码(C):

main(){while(~scanf("%*d"))puts("Yes");}


[E]:数论构造

\(\text{AC}\) 代码:


[F]:容斥




[G]:线段树


[J]:思维+归并排序


补题方案

  • E、G 较简单,赛后应马上补上。

  • C、F 属于常见知识点,也应尽快补上。

  • 其余神仙题...待进一步提升实力后再回来填坑吧QAq


总结

  • 死磕没有结果时,应该去跟榜...


【暑期集训第一场】欧拉回路 | 思维 | 数论构造 | 容斥原理 | 线段树 | 归并排序

标签:test   答案   这一   tab   contest   pre   ref   scan   str   

原文地址:https://www.cnblogs.com/403-forbidden/p/11312619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!