南邮2014网络赛题解
2014-03-09 22:31
267 查看
概要说明:除了G题之外,其他题目的难度应该都在现场赛签到题到保铜题之间(没有知识点壁垒,每道题都经不起细想的),考察点包括模拟题、暴力枚举、网络流、组合数学、动态规划。
如果本场比赛能够给大家提供一次检验自己对各个知识点理解程度的机会的话那我就很开心了^_^
A:
可以发现第一个数字确定之后整个数字就可以推算出来了,所以最多只有2k种数。。不过由于k可能>9,所以不能直接按第一个位置上的数来贪心。。老老实实生成每种数然后sort一下就行了_(:з」∠)_
(居然能卡这么多人。。松老师可是分分钟就拍完的)
B:
没什么好说的
C:
由于公司的数量比较少,可以枚举最后决策的结果。不过直接枚举的复杂度是2^40,会超时。可以先枚举前n/2个公司,每次枚举我们只关心被选中的公司数以及它们的人数总和关于m的模值。用一个hash表记录模m为x时最多可以选几家公司。然后再枚举后n/2个公司,这时候每次枚举就在之前的hash表中找到对应的可以使总人数整除的最大值,加上后n/2个公司的选择情况就得到了一个候选方案。统计出这些方案中的最大值即可。
(比赛的时候被lym小朋友爆搜过了。。而且15ms完爆我的1000ms代码。。迷の迭代加深搜索。继去年校赛出的trie图被wxz小朋友比标程快地暴力搞掉之后的又一坑题╮(╯▽╰)╭)
D:
把每个数看作一个点,若gcd(x,y)>1,则在x,y之间连一条边。最后可以得到一个无向图,我们要求的就是在这张图中最少删掉几个点,使得其中的某两个点不连通。
把给出的两个素数分别作为源点s和汇点t。对集合中的每一个点i来说,把它拆成i,i+n这两个点,加一条i->i+n的边,容量为1。若s和i之间有边,则加一条s->i的边,容量为INF。若i和t之间有边,则加一条i+n->t的边,容量为INF。跑一次最大流,得到的结果Flow就是从s到t有多少条不同的连通方式。
简单证明:对于其中的一条连通方式来说,至少可以找到一个点,满足删掉这个点使得最大流减小,所以最多删Flow次就能使两个数绝对互质。又因为每个点之间的容量为1,不可能出现删一个点使得最大流的减小值超过1,所以至少要删Flow次。于是Flow就是最后的答案。
E:
首先我们要算出任意两种颜色(包含同色)的房间的最远距离,然后在这些最远距离中选一个最小值即为所求。
对于坐标为(x1,y1,z1)和(x2,y2,z2)的两个点来说,dis=|x1-x2|+|y1-y2|+|z1-z2|。当然要做的就是去掉绝对值,由于我们只关心dis的最大值,所以只需要分情况讨论然后取出每种情况的最大值比较一下就行了。dis的计算结果可以分成4种
(x1+y1+z1)-(x2+y2+z2)
(x1+y1-z1)-(x2+y2-z2)
(x1-y1+z1)-(x2-y2+z2)
(x1-y1-y2)-(x2-y2-z2)
对于每种编号,只需要记录(x+y+z)、(x+y-z)、(x-y+z)、(x-y-z)的最大值和最小值然后比较一下就能算出结果了
F:
可以按书的种类的顺序递推求解
设dp[i][j]表示一共送了j本书,并且这j本书都是种类在1~i中的.假设其中种类为i的书共有k本,那么可以得到递推公式dp[i][j]=dp[i-1][j-k]*C(j,k),注意一下边界情况就能愉快的ac了
G:
本来窝只出了上面6题,料想也3小时也来不及AK。然后老板说12小时。。。然后只能加了一道经典难题
数位dp,具体解法参见许昊然《codeforces题目泛做》8E这题
如果本场比赛能够给大家提供一次检验自己对各个知识点理解程度的机会的话那我就很开心了^_^
A:
可以发现第一个数字确定之后整个数字就可以推算出来了,所以最多只有2k种数。。不过由于k可能>9,所以不能直接按第一个位置上的数来贪心。。老老实实生成每种数然后sort一下就行了_(:з」∠)_
(居然能卡这么多人。。松老师可是分分钟就拍完的)
B:
没什么好说的
C:
由于公司的数量比较少,可以枚举最后决策的结果。不过直接枚举的复杂度是2^40,会超时。可以先枚举前n/2个公司,每次枚举我们只关心被选中的公司数以及它们的人数总和关于m的模值。用一个hash表记录模m为x时最多可以选几家公司。然后再枚举后n/2个公司,这时候每次枚举就在之前的hash表中找到对应的可以使总人数整除的最大值,加上后n/2个公司的选择情况就得到了一个候选方案。统计出这些方案中的最大值即可。
(比赛的时候被lym小朋友爆搜过了。。而且15ms完爆我的1000ms代码。。迷の迭代加深搜索。继去年校赛出的trie图被wxz小朋友比标程快地暴力搞掉之后的又一坑题╮(╯▽╰)╭)
D:
把每个数看作一个点,若gcd(x,y)>1,则在x,y之间连一条边。最后可以得到一个无向图,我们要求的就是在这张图中最少删掉几个点,使得其中的某两个点不连通。
把给出的两个素数分别作为源点s和汇点t。对集合中的每一个点i来说,把它拆成i,i+n这两个点,加一条i->i+n的边,容量为1。若s和i之间有边,则加一条s->i的边,容量为INF。若i和t之间有边,则加一条i+n->t的边,容量为INF。跑一次最大流,得到的结果Flow就是从s到t有多少条不同的连通方式。
简单证明:对于其中的一条连通方式来说,至少可以找到一个点,满足删掉这个点使得最大流减小,所以最多删Flow次就能使两个数绝对互质。又因为每个点之间的容量为1,不可能出现删一个点使得最大流的减小值超过1,所以至少要删Flow次。于是Flow就是最后的答案。
E:
首先我们要算出任意两种颜色(包含同色)的房间的最远距离,然后在这些最远距离中选一个最小值即为所求。
对于坐标为(x1,y1,z1)和(x2,y2,z2)的两个点来说,dis=|x1-x2|+|y1-y2|+|z1-z2|。当然要做的就是去掉绝对值,由于我们只关心dis的最大值,所以只需要分情况讨论然后取出每种情况的最大值比较一下就行了。dis的计算结果可以分成4种
(x1+y1+z1)-(x2+y2+z2)
(x1+y1-z1)-(x2+y2-z2)
(x1-y1+z1)-(x2-y2+z2)
(x1-y1-y2)-(x2-y2-z2)
对于每种编号,只需要记录(x+y+z)、(x+y-z)、(x-y+z)、(x-y-z)的最大值和最小值然后比较一下就能算出结果了
F:
可以按书的种类的顺序递推求解
设dp[i][j]表示一共送了j本书,并且这j本书都是种类在1~i中的.假设其中种类为i的书共有k本,那么可以得到递推公式dp[i][j]=dp[i-1][j-k]*C(j,k),注意一下边界情况就能愉快的ac了
G:
本来窝只出了上面6题,料想也3小时也来不及AK。然后老板说12小时。。。然后只能加了一道经典难题
数位dp,具体解法参见许昊然《codeforces题目泛做》8E这题
相关文章推荐
- 【转】TCP的SEQ和ACK的生成
- http://www.google.com.hk/patents/US8566217
- Linux下抓包命令tcpdump的使用
- RG100-AA下OpenWRT网络VLAN配置
- Ubuntu配置网络命令(转载)
- Linux下抓包命令tcpflow使用总结
- 享受Linux中编译安装httpd的快感 "就是你了,httpd"
- android 简单网络图片查看器 HttpURLConnection
- 一个dht网络的“磁力链接”搜索python代码
- TCP
- 计算机网络笔试题
- 【转】网络管理员必知之:IP地址划分
- java TCP/IP socket
- 黑马程序员04_网络编程
- iOS开发——网络基础、iOS常用http请求、URL编码
- http协议户端下载流程
- TCP连接
- HTTP协议之multipart/form-data请求分析
- openssl,加密,解密,https
- HTTP协议详解(真的很经典)