2015编程之美挑战赛初赛题目

第一轮第一题:彩色的树

给定一棵n个节点的树,节点编号为1, 2, …, n。树中有n - 1条边,任意两个节点间恰好有一条路径。这是一棵彩色的树,每个节点恰好可以染一种颜色。初始时,所有节点的颜色都为0。现在需要实现两种操作:

1. 改变节点x的颜色为y

2. 询问整棵树被划分成了多少棵颜色相同的子树。即每棵子树内的节点颜色都相同,而相邻子树的颜色不同。

输入格式

第一行一个整数T,表示数据组数,以下是T组数据。

每组数据第一行是n,表示树的节点个数。接下来n - 1行每行两个数ij,表示节点ij间有一条边。接下来是一个数q,表示操作数。之后q行,每行表示以下两种操作之一:

1. 若为"1",则询问划分的子树个数。

2. 若为"2 x y",则将节点x的颜色改为y

输出格式

每组数据的第一行为”Case #X:”X为测试数据编号,从1开始。

接下来的每一行,对于每一个询问,输出一个整数,为划分成的子树个数。

输入样例

2

3

1 2

2 3

3

1

2 2 1

1

5

1 2

2 3

2 4

2 5

4

1

2 2 1

2 3 2

1

输出样例

Case #1:

1

3

Case #2:

1

5

数据范围

1 ≤ T ≤20

0 ≤ y ≤ 100000

小数据

1 ≤ n, q ≤ 5000

大数据

1 ≤ n, q ≤ 100000

解题思路

对于每个节点,记录其直接的子节点的颜色分布。在修改一个节点的颜色同时,修改其父节点的子节点颜色分布。记ab分别是修改颜色前后,与当前节点同色的邻居节点个数,那么答案增加a - b


第一轮第二题:建造金字塔

在二次元中,金字塔是一个底边在x轴上的等腰直角三角形。

你是二次元世界的一个建筑承包商。现在有N个建造订单,每个订单有一个收益w,即建造此金字塔可获得w的收益。对每个订单可以选择建造或不建造。

建造一个金字塔的成本是金字塔的面积,如果两个或多个金字塔有重叠面积,则建造这些金字塔时重叠部份仅需建造一次。

建造一组金字塔的总利润是收益总和扣除成本。现给出这些订单,请求出最大利润。

输入格式

输入数据第一行为一个整数T,表示数据组数。

每组数据第一行为一个整数N,表示订单数目。

接下来N行,每行三个整数x, y, w,表示一个订单。(x, y)表示建造出的金字塔的顶点,w表示收益。

输出格式

对于每组数据输出一行”Case #X:Y”X表示数据编号(从1开始),Y表示最大利润,四舍五入到小数点后两位。

输入样例

3

2

2 2 3

6 2 5

3

1 1 1

2 2 3

3 3 5

3

1 1 1

2 2 3

3 3 6

输出样例

Case #1:1.00

Case #2:0.00

Case #3:1.00

数据范围

1 ≤ T ≤ 20

0 ≤ w ≤ 107

小数据

1 ≤ N ≤ 20

0 ≤ x, y ≤ 20

大数据

1 ≤ N ≤ 1000

0 ≤ x, y ≤ 1000

解题思路

解法一:把建造金字塔看作用一条水平延伸的折线覆盖金字塔顶点的过程,折线段的斜率为1-1,或者重合与x轴。设f(x, y)为折线右端点在(x, y)时的最大收益,按x递增顺序递推。

解法二:把所有金字塔按右端点横坐标排序。设f(i)为建造1i - 1中的某些金字塔,并且一定建造i的最大收益;g(i)为建造1i - 1中的某些金字塔,而不建造i的收益。递推时注意处理完全包含在i中的金字塔。


第一轮第三题:质数相关

两个数a b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数。一个集合S被称为质数相关,是指S中存在两个数质数相关的数,否则称S为质数无关。如{2, 8, 17}质数无关,但{2, 8, 16}, {3, 6}质数相关。现在给定一个集合S,问S的所有质数无关子集中,最大的子集的大小。

输入格式

第一行为一个数T,为数据组数。之后每组数据包含两行。

第一行为N,为集合S的大小。第二行为N个整数,表示集合内的数。

输出格式

对于每组数据输出一行,形如”Case #X:Y”X为数据编号,从1开始,Y为最大的子集的大小。

输入样例

3

5

2 4 8 16 32

5

2 3 4 6 9

3

1 2 3

输出样例

Case #1:3

Case #2:3

Case #3:2

数据范围

1 ≤ T ≤20

集合S内的数两两不同且范围在1500000之间。

小数据

1 ≤ N ≤15

大数据

1 ≤ N ≤1000

解题思路

所有整数可以按照质因子个数的奇偶性分为两部分,按照质数相关构造二分图,答案为n - 二分图的最小覆盖数。


第二轮第一题:扑克牌

一副不含王的扑克牌由52张牌组成,由红桃、黑桃、梅花、方块4组牌组成,每组13张不同的面值。现在给定52张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数。

牌的表示方法为XY,其中X为面值,为23456789TJQKA中的一个。Y为花色,为SHDC中的一个。如2S2HTD等。

输入格式

第一行为一个整数T,为数据组数。

之后每组数据占一行。这一行首先包含一个整数N,表示给定的牌的张数,接下来N个由空格分隔的字符串,每个字符串长度为2,表示一张牌。每组数据中的扑克牌各不相同。

输出格式

对于每组数据输出一行,形如”Case #X:Y”X为数据组数,从1开始。Y为可能的方案数,由于答案可能很大,请输出模 264之后的值。

输入样例

5

1 TC

2 TC TS

5 2C ADAC JC JH

4 AC KCQC JC

6 AC ADAS JC JD KD

输出样例

Case #1:1

Case #2:0

Case #3:48

Case #4:24

Case #5:120

数据范围

1 ≤ T ≤20000

小数据

1 ≤ N ≤ 5

大数据

1 ≤ N ≤ 52


解题思路

记一组牌中,有n4个数字出现了4次,n3个数字出现了3次,n2个数字出现了2次,n1个数字出现了1次。设f(n1, n2, n3, n4)为不考虑花色时,相邻牌不同数字的排列总数。f可以利用容斥定理递推求解。


第二轮第二题:攻城略地

AB两国间发生战争了,B国要在最短时间内对A国发动攻击。已知A国共有n个城市(城市编号1, 2,…, n),城市间有一些道路相连。每座城市的防御力为w,直接攻下该城的代价是w。若该城市的相邻城市(有道路连接)中有一个已被占领,则攻下该城市的代价为0

除了占领城市,B国还要摧毁A国的交通系统,因而他们需要破坏至少k条道路。由于道路损毁,攻下所有城市的代价相应会增加。假设B国可以任意选择要摧毁的道路,那么攻下所有城市的最小代价是多少?

输入格式

第一行一个整数T,表示数据组数,以下是T组数据。

每组数据第一行包含3个整数n, m, k

第二行是n个整数,分别表示占领城市1, 2, …, n的代价w

接下来m行每行两个数i, j,表示城市i与城市j间有一条道路。

输出格式

对于每组数据输出一行,格式为”Case #X:Y”X表示数据编号(从1开始),Y为答案。

输入样例

2

4 4 2

6 5 3 4

1 2

1 3

2 3

2 4

4 4 4

6 5 3 4

1 2

1 3

2 3

2 4

输出样例

Case #1:7

Case #2:18

数据范围

1 ≤ T ≤30

k ≤ m

0 ≤ w ≤ 108

小数据

1 ≤ n ≤ 1000

0 ≤ m ≤ 5000

大数据

1 ≤ n ≤ 106

0 ≤ m ≤ 106

解题思路

首先,假设图中有c个连通分量,对于每一个联通分量,只需要占领其中代价最小的节点(记为S)。如果在删除k条边后,不能保证所有联通分量仍然联通,那么意味着会增加新的联通分量,只需加上除了S以外代价最小的n + k - m - c个节点。


第二轮第三题:八卦的小冰

小冰是个八卦的人,最近她对一个社交网站很感兴趣。

由于小冰是个机器人,所以当然可以很快地弄清楚这个社交网站中用户的信息啦。

她发现这个社交网站中有N个用户,用户和用户之间可以进行互动。小冰根据用户之间互动的次数和内容判断每对用户之间的亲密度。亲密度非负,若大于零表示这两个用户之间是好友关系。由于这个网站是活跃的,所以小冰会不停地更新用户之间的亲密度。

由于隐私保护,小冰无法知道每个用户的确切性别,但是作为一只很聪明的人工智能,小冰可以通过每个用户的行为来猜测性别。当然这种猜测是不准确的,小冰有可能会改变对一个用户的判断。

小冰想知道这个社交网络的八卦度是多少。八卦度的定义是社交网络中所有异性好友之间的亲密度之和。你能帮助她吗?

输入格式

第一行一个整数T,表示数据组数。接下来是T组数据,每组数据的格式如下:

第一行是三个整数N, M, Q,分别表示用户数、初始的好友对数、操作数。

第二行是N个空格隔开的数,第i个数表示i号用户的性别,用01表示。

接下来的M行,每行三个数x, y, z,代表初始状态用户x和用户y之间的亲密度是z。除此之外的用户之间的亲密度初始为0

接下来是Q行,每行是以下三种操作中的一种:

1. “1 x”:改变用户x的性别

2. “2 x y z”:改变用户x与用户y之间的亲密度为z

3. “3”:询问八卦度

输出格式

对于每组数据首先输出一行”Case #X:”X为测试数据编号。

接下来对于每一个询问,输出一行包含询问的八卦度。

输入样例

1

3 2 8

0 1 0

1 2 1

1 3 1

3

1 1

1 2

3

2 2 3 2

3

1 2

3

输出样例

Case #1:

1

2

2

3

数据范围

1 ≤ T ≤ 20

1 ≤ x, y ≤ N

0 ≤ z ≤ 100000

小数据

1 ≤ N, M ≤ 100

1 ≤ Q ≤ 1000

大数据

1 ≤ N, M, Q ≤ 100000




参考:http://www.wtoutiao.com/p/ebcvPp.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值