Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)

第一次参加cf的比赛 有点小幸运也有点小遗憾
给自己定个小目标 1500【对啊我就是很菜qvq

A. The Rank

难度:普及-

n位学生 每个学生有四个分数
然鹅我们只需要知道他的分数和
按分数和递减排名 同分的按编号递增排名
现在小Smith的id是1号 求他的成绩排名

解 : 不用说了吧。。暴力排序就行

B. The Bits

有两个n位二进制数A和B
现在可以选择A的两位交换
交换后的数为C
求问有多少种交换方式
使得 A | B != C | B

解 : 每一位的A 和 B 可能有如下四种对应方式
A B
0 0
0 1
1 0
1 1

第2、4种情况无论A那一位是什么最后的和都不变
第一种换成 1 会变 第三种换成0会变

那么交换方式就有
1 <=> 3 1 <=> 4 2 <=> 3
三种交换方式

只要在输入时统计每种对应有多少组 相乘即可

C. The Phone Number

求长度为n的排列
使得该排列LIS(最长上升子序列)与LDS(最长下降子序列)的长度和最小

我太菜了并不会证
但按照sqrt(n) 分组是最小的

D. The Wu

一个假项链【蒟蒻到现在都没读懂这题跟项链有什么关系。。。
总之啦 有n, m, q (n ∈ [1, 12] m, q∈[1, 5e5])
二进制从左到右的第i位有w[i]的价值
给出m个n位二进制数 再给出q个询问
每个询问有一个n位二进制数A 和一个限定值v

对于两个二进制数 如果它们的第i位相等 那么这一位获得w[i]的贡献
否则没有贡献

对于一个询问 A与原来的m个二进制数每个都有一个总贡献
输出总贡献不大于v的个数

这道题完全凭直觉乱搞?!
2 ^ 12 = 4096 这很状压
所以我们与处理出所有可能的总价值
这里用100011表示 ** 仅取w[2] w[3] w[4] **
也就是0表示取 1表示不取
这么做是为了利用抑或的特性 即0抑或一个数等于它自己
预处理 cnt[i] = x; 表示二进制数i代表的总贡献是x
对于给出的A 与其总贡献为x的二进制数是A ^ i
把询问按A排序 把cnt按x值排序
再预处理出m个二进制数每种出现了多少个
离线处理就行了
复杂度O(2 ^ 2n)

posted @ 2018-08-09 14:45  hjmmm  阅读(109)  评论(0编辑  收藏  举报