ACM International Collegiate Programming Contest World Finals 2014

A - Baggage

题目描述:有\(2n\)个字符摆在编号为\(1\)~\(2n\)格子里,奇数位为\(B\),偶数位为\(A\),另外编号为\((-2n+1)\)~\(0\)的格子是空的,现在可以移动两个相邻的字符,移动到两个空的格子里,最终使得全部\(A\)在全部\(B\)的左边,而且字符都是连续的,但不必放回原位,输出最小步数的方案。

solution
显然,最小操作为\(n\)步。
假设\(n=8\),
__BABABABABABABABA

ABBABABABABABAB__A

ABBA__BABABABABBAA

ABBA|__BABABABA|BBAA

如果存在一种方案使得中间字变成下面的模样,即两个空位跑到了最后
ABBA|AAAABBBB__|BBAA

A__AAAAABBBBBBBBAA

AAAAAAAABBBBBBBB__

最后两位也是空位。四步解决八个字符(四个\(A\),四个\(B\)),也就是可以递归求解方案。

但要特殊处理\(n=3, 4, 5, 6, 7\)的方案,因为这几个的操作比较特殊,最优操作并不是上述的操作,这几个特殊的可以暴搜出来。

时间复杂度:\(O(n)\)

B - Buffed Buffet

题目描述:有\(n\)道菜,这\(n\)道菜可以分成两类,第一类是以整数为计量,即一道这样的菜有一个固定的重量\(\omega_i\),若这道菜点了\(m\)道,则第\(j\)道的美味值为\(t_i-j\Delta t\);第二类是以小数为计量,即这道菜可以取任意一个重量\(X\),则这道菜的美味值为\(\int_{0}^{X} (t_i-x\Delta t) dt\)。问在菜的总质量为\(W\)的情况下,美味值最大是多少。

solution
先解决第一类的菜。
这看起来像一个普通的背包,但直接\(O(nW^2)\)会超时。可以考虑将菜按重量分类,重量相同的菜各自算出第\(j\)道菜的美味值,因为这些菜的重量是相同的,所以取(相同重量的菜)算出来的美味值的前\(W\)个即可。这样归类之后,最多有\(n\)种重量不同的菜,所以背包的时间复杂度为\(O(\sum_{w=1}^{W} wlnn)=O(\frac{1}{2}W^2lnn)\)
然后解决第二类菜。
枚举第一类菜的总重量\(wf\),剩下的重量由第二类的菜来承担。
因为是重量是连续的,考虑用拉格朗日乘数法。设每种菜的重量为\(x_i\),
约束函数
\[g(x_i)=\sum x_i-(W-wf)=0\]
目标函数为
\[f(x_i)=\sum \frac{1}{2}(2t_i-x_i\Delta t)x_i\]
设函数
\[F(x_i)=f(x_i)-\lambda g(x_i)\]
求解得
\[x_i=\frac{t_i-\lambda }{\Delta t}\]
但因为\(x_i \geq 0\),所以选择用二分的方法来求解\(\lambda\),在这里\(\lambda\)有一个特殊的几何意义:每道菜只取美味函数(美味值的被积函数)大于等于\(\lambda\)的部分,若某道菜的\(t_i<\lambda\),则\(x_i=0\)。\(\lambda\)越小,\(g(x_i)\)越能满足。
但有一类特殊的菜需要注意,就是\(\Delta t=0\)的菜,这些菜的美味函数是一个常数函数,这些菜不能用上面的方法来求解(因为\(\Delta t\)在\(x_i\)的分母)。显然,这类菜只需考虑\(t_i\)最大值(\(con\))即可,当\(\lambda > con\)时,就不必选这道菜了,否则\(\lambda < con\)的部分可以用这道菜来补充,所以可以令\(\lambda =con\),算出\(\sum x_i, (W-wf)-\sum x_i\)的部分由\(con\)来补充,更新答案。

如图\(cut\)表示\(con>\lambda\)的情况,此时菜只选到\(cut\)就好,剩余的部分可由\(con\)补充,这样美味值就能增加黄色部分。

时间复杂度:\(O(W^2lnn+Wnlog(2*10^{16})),2*10^{16}=2*10^8*10^8\),前一个\(2*10^8\)表示\(\lambda\)的范围,后一个\(10^8\)表示精度范围。

C - Crane Balancing

题目描述:给出一个在二维平面上的多边形,在平面上\(1 \times 1\)的正方形的重量为\(1\),现在在多边形上指定一个顶点,在这个顶点上放一定质量的物体(无体积),满足多边形不向两边倒,问物体质量的范围,或无论质量是多少都会倒(unstable)

solution
将多边形剖分成很多个三角形,有向面积就是有向重量,然后求出三角形的质心(坐标平均),然后求出这些质点的质心,这个质心就是多边形的质心。找出多边形在\(y\)轴上的点,只有最左边和最右边的点才可能成为支点。多边形的质心与指定顶点构成的新质心的\(x\)坐标一定要在这两个支点之间,多边形才不会倒。
所以分类判断多边形的质心是否在两个支点之间,再根据指定的顶点再分类讨论,注意讨论指定顶点的\(x\)坐标是否在支点上。

时间复杂度:\(O(n)\)

D - Game Strategy

题目描述:有\(n\)个点,每个点有若干个集合(总共有\(m\)个)。有两个人在玩游戏,一开始指针在某一个点,第一个人这个点的一个集合,第二人选择这个集合内的一个点,然后指针移向那个点。分别求出从每个点出发,其它点能否到达,如果能则输出最小步数,否则输出\(-1\)。(第二个人是阻止第一个人的)

solution
显然如果能到达某个点,则最小步数不超过\(n\),所以可以一步一步地走。显然答案是最长路径,然后暴力搜就好了。

时间复杂度:\(O(n^2m)\)

I - Sensor Network

题目描述:求一个无向图的最大团。

solution
随机一种\(n\)排列,然后按排列顺序构最大团。

时间复杂度:\(O(n^2*10000)\)

K - Surveillance

题目描述:给出\(n\)个数对\((a, b)\),如果\(a \leq b\),则表示区间\([a, b]\),如果\(a>b\),则表示区间\([1, b], [a, m]\),问最少需要多少个数对覆盖\([1, m]\)。

solution
将区间延长至\([1, 2m]\),则一个数对对应一个区间。那么问题变成最少区间覆盖一个长度至少为\(m\)的连续区间。
将区间按右端点排序,然后倍增求出一个区间\(i\)出发向左利用\(2^j\)个区间最左能到哪个区间,以及最长能覆盖多长的区间。然后再倍增求答案即可。

时间复杂度:\(O(nlogn)\)

ACM International Collegiate Programming Contest World Finals 2014的更多相关文章

  1. ACM International Collegiate Programming Contest World Finals 2013

    ACM International Collegiate Programming Contest World Finals 2013 A - Self-Assembly 题目描述:给出\(n\)个正方 ...

  2. ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syria, Lattakia, Tishreen University, April, 30, 2018

    ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syr ...

  3. ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索

    ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...

  4. Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

    今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... Gym100814B 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把 ...

  5. [ACM International Collegiate Programming Contest, Amman Collegiate Programming Contest (2018)]

    https://codeforces.com/gym/101810 A. Careful Thief time limit per test 2.5 s memory limit per test 2 ...

  6. 2019.04.04 第二次训练 【ACM International Collegiate Programming Contest, JUST Collegiate Programming Contest (2018)】

    题目链接:https://codeforces.com/gym/101853 A: ✅ B: (二分图匹配) https://blog.csdn.net/qq_41997978/article/det ...

  7. ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)

    A.Arcade Game(康拓展开) 题意: 给出一个每个数位都不同的数n,进行一场游戏.每次游戏将n个数的每个数位重组.如果重组后的数比原来的数大则继续游戏,否则算输.如果重组后的数是最大的数则算 ...

  8. Codeforces Gym100814 I.Salem-异或 (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)

    这个题就是二进制,找两个数相应的二进制相对应的位置上数不同的最多的个数.异或写就可以. 一开始还想麻烦了,找出来最大的偶数和最大的奇数,最小的偶数和最小的奇数,但是这样想考虑的不全.因为范围比较小,直 ...

  9. Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)

    这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 ...

随机推荐

  1. java中枚举型的定义以及使用

    1.如何定义枚举型 public enum gender{ GEN1("男","1"), GEN2("女","0"); ...

  2. BZOJ4953 Wf2017Posterize(动态规划)

    设f[i][j]为前i种强度选了j种且其中第i种选时前i个的最小误差.转移枚举上个选啥前缀和优化即可. #include<iostream> #include<cstdio> ...

  3. C++解析(4):引用的本质

    0.目录 1.引用的意义 2.特殊的引用 3.引用的本质 4.函数返回引用 5.小结 1.引用的意义 引用作为变量別名而存在,因此在一些场合可以代替指针 引用相对于指针来说具有更好的可读性和实用性 注 ...

  4. QoS专题-第1期-QoS理论篇

    QoS理论篇 1      QoS的产生 随着网络技术的飞速发展,IP网络已经从当初的单一数据网络向集成数据.语音.视频.游戏的多业务网络转变.网络中所承载的数据呈几何级倍数增长,而且这些业务对网络带 ...

  5. Jsp遍历后台传过来的List

    1:使用jstl标签 (可以和自定义标签配合使用) 首先引用jstl标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" ...

  6. HSTS的来龙去脉

    前言 安全经常说“云.管.端”,“管”指的是管道,传输过程中的安全.为了确保信息在网络传输层的安全,现在很多网站都开启了HTTPS,也就是HTTP+TLS,在传输过程中对信息进行加密.HTTPS使用了 ...

  7. dorado7常用内容

    1.dataset添加数据this.get("#dsProduct").getData().insert();或者this.get("#dsProduct"). ...

  8. 2017 Multi-University Training Contest - 2

    HDU 6045 #pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #in ...

  9. Swagger2 添加HTTP head参数,解决用户是token信息保留

    转:http://blog.csdn.net/u014044812/article/details/71473226 大家使用swagger往往会和JWT一起使用,而一般使用jwt会将token放在h ...

  10. python 删除文件/夹

    原文 : http://www.cnblogs.com/SophiaTang/archive/2012/01/16/2323467.html import os 删除文件: os.remove() 删 ...