暑假测试 Day 6

问题 A: 乐曲创作

时间限制: 1 Sec内存限制: 256 MB

提交: 370解决: 58

[​​提交​​​][​​状态​​​][​​讨论版​​]

题目描述

小可可是音乐学院的一名学生,他需要经常创作乐曲完成老师布置的作业。

可是,小可可是一个懒惰的学生。所以,每次完成作业时,他不会重新创作一首新的乐曲,而是去修改上一次创作过的乐曲作为作业交给老师。小可可的乐曲由N个音调不同的音符组成,分别记为音符1…N。因此,他创作的乐曲是由1…N的一个排列构成,例如N=5时,他创作的乐曲可能为:2,1,3,5,4。但是,小可可每一次会按照一定的要求修改上一次创作的乐曲。他规定,修改过后的乐曲必须与上一次创作的乐曲的悦耳值相同。所谓悦耳值就是他所创作的乐曲,也就是1…N的排列中逆序对的个数。逆序对是指对于1…N的一个排列A1,A2,...,An中的两个数Ai,Aj,满足i<j而Ai>Aj,例如:2,1,3,5,4 这个排列中有2个逆序对,分别为:(2,1),(5,4)。可是,满足条件的排列有很多,小可可会选择在这些满足条件的排列中字典序大于上次创作乐曲的排列的字典序,且字典序尽量小的那一个排列作为新的乐曲。这里的字典序指:排列A:A1,A2…An和排列B:B1,B2…Bn,若存在一个数k,使得Ak<Bk,且A1=B1,A2=B2,……,Ak-1=Bk-1,我们就称排列A的字典序小于排列B的字典序。

由于小可可最近要参加学校的篮球比赛,他没有空余时间完成老师布置的作业,于是他希望作为他好友的你帮助他完成作业。

输入

第1行1个正整数N,表示小可可的乐曲由N个音调不同的音符组成。

第2行为N个不同的正整数,表示1…N的一个排列,即小可可上次创作的乐曲。

输出

输出只有一行,为1...N的一个排列,表示你帮助小可可修改后的乐曲。

数据保证有满足条件的解。

样例输入

3

2 3 1

样例输出

3 1 2

提示

【样例2】

music.in

music.out

5

2 1 3 5 4

2 1 4 3 5

数据范围】

30%的数据,1≤N≤10;

60%的数据,1≤N≤1000;

100%的数据,1≤N≤500000。

~~:

好难啊……

完全没有任何思路。

这种讨厌的构造题……就算题解最初贪心地选择的部分我到现在还是迷迷糊糊。

爆0.

问题 B: 准备复赛

时间限制: 1 Sec内存限制: 256 MB

提交: 167解决: 10

[​​提交​​​][​​状态​​​][​​讨论版​​]

题目描述

今年的NOIP初赛真是简单,小可可不用吹灰之力就考进了复赛,但是复赛可没有那么简单了,小可可想要好好准备复赛,争取复赛拿个省一。今天小可可在复习树和图的最大匹配时就碰到这样的一个难题:n个节点满足以下性质的不同的树有多少种。

1、树是有标号的,每个节点被标上1到n之间的整数;

2、每个节点最多和其他3个节点相连,但是1号节点最多和其他2个节点相连;

3、这棵树的最大匹配(把树看成二分图后的最大匹配)数为k。

两棵树被认为不同当且仅当存在两个点u、v,在一棵树中u、v之间有边,另一棵树中u、v之间没边。

由于答案可能很大,所以小可可让你输出答案模1000000007 (109 + 7)。

输入

第一行包含两个正整数n,k。

输出

包含一行,为方案数。

样例输入

4 2

样例输出

12

提示

【数据范围】

对于30%的数据,2≤n≤5;

对于60%的数据,2≤n≤20;

对于100%的数据,2≤n≤50。

~~:

没有思路+1.

最后一些小数据可以上表就上了。。

然后骗了15分。

问题 C: 星球联盟

时间限制: 1 Sec内存限制: 256 MB

提交: 134解决: 14

[​​提交​​​][​​状态​​​][​​讨论版​​]

题目描述

在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。

但是,组成联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径。

为了壮大联盟的队伍,这些星球将建设P条新的太空隧道。这P条新隧道将按顺序依次建成。一条新轨道建成后,可能会使一些星球属于同一个联盟。你的任务是计算出,在一条新隧道建设完毕后,判断这条新轨道连接的两个星球是否属于同一个联盟,如果属于同一个联盟就计算出这个联盟中有多少个星球。

输入

第1行三个整数N,M和P,分别表示总星球数,初始时太空隧道的数目和即将建设的轨道数目。

第2至第M+1行,每行两个整数,表示初始时的每条太空隧道连接的两个星球编号。

第M+2行至第M+P+1行,每行两个整数,表示新建的太空隧道连接的两个星球编号。这些太空隧道按照输入的顺序依次建成。

输出

输出共P行。如果这条新的太空隧道连接的两个星球属于同一个联盟,就输出一个整数,表示这两个星球所在联盟的星球数。如果这条新的太空隧道连接的两个星球不属于同一个联盟,就输出”No”(不含引号)。

样例输入

3 2 1

1 2

1 3

2 3

样例输出

3

提示

【样例1说明】

新建成的隧道连接2、3两个星球。

这条隧道1和2,2和3,1和3之间都存在环形线路。1,2,3同属一个联盟,答案为3

【样例2】

alliance.in

alliance.out

5 3 4

1 2

4 3

4 5

2 3

1 3

4 5

2 4

No

3

2

5

【样例2说明】

【数据范围】

对于10%的数据有1≤N,M,P≤100;

对于40%的数据有1≤N,M,P≤2000;

对于100%的数据有1≤N,M,P≤200000。

~~:

坑啊……当时真的太急了。

题目看错了以为求联通的总个数……然后没多想,

直接码上LCT了……

结果倒好,虽然没调就对了,但是发现样例2过不去……

看了下才发现题目看错了。。。

其实就是想象一棵树,然后连接的时候,两个点到他们LCA直接形成了环。。

然后并查集乱搞。

真是不爽。不过好像LCT也可能可以做把……

爆0.

!!:

总分15,

排名29,

总人数48.

遇上这种题是真的不会了……

菜啊……