链接:http://codeforces.com/contest/1017
这把肯定要上分的,结果因为服务器爆炸,unrated了好气。。
A:太水了不多说。
1 |
|
B:给你两个01串,要求你交换第一个串中的任意两个数,使得这两个串“或”操作后的结果和原始的不一样,问多少种换法。
手写一下会发现导致变化的a、b串某一位置的组合是“10”(用0换掉第一个1)和“00”(用1换掉第一个0),我们统计这样的位置,以及0、1的出现次数,把这两种结果加起来,再减掉一次10和00出现的组合乘积就行了(因为10中的1和00中的0会多进行一次)。
1 |
|
C:构造一个长度为n排列,使得这个排列的LIS和LDS长度之和最小。
遇事不决打个表:
我们发现一个规律:当要构造长度为n的排列时,我们可以找到第一个比n大的平方数$k^2$,然后我们依次放入$k^2-k+1,…k^2-1,k^2,…,1,2,…,k$,当要放的数比n大的时候不输出就ok了。
1 |
|
打表代码:
1 |
|
D:两个01串有个匹配的价值,对应位相同的话就要加上那位的价值。给你一些询问串,问有多少串和它的匹配价值不超过k。
这题n给的很小,考虑预处理出任意串和所给串的价值,然后统计当前串这个价值下的字符串数,维护一个前缀和,然后查询就行了。
1 |
|