7.24-Codeforces Round #494 (Div. 3)

链接:http://codeforces.com/contest/1003

A. Polycarp's Pockets
题型:模拟
题意:把初始集合拆分,要求相同的数不在同一个集合中,求出需要的集合个数。
原因:WA-3,<=又不小心写成<+...
B. Binary String Constructing
题型:构造
题意:给出a个0,b个1,用所有数字构造一个01串s,使得s中sisi+1的情况数为x
原因:题意读错,以为要求出所有符合要求的串。
自己再梳理一下:既然只要写出一种,而且题目保证必定有解,那就好办了。先构造t=x/2个“01”或“10”,0或1个数多的放前面,这样得到的其实是2*t-1个sisi+1。若x是奇数,则还差两个;x是偶数还差1个。现在串的结尾为个数少的数,为满足情况一,先输完个数多的数再输出个数少的数就能得到两个匹配;为满足情况二,先输完个数少的数再输出个数多的数就能得到一个匹配。
C. Intense Heat

题型:

题意:找段时最高温,以平均温度计

原因:第一次写的时候忽略了段时是连续的...我也是天才...后面用了二维数组第一维存段时的开端

D. Coins and Queries

题型:贪心

题意:给定一个集合p,集合中每个数都确定为 2 次幂 ,询问对正整数q,在p中是否能找到各元素和为q的最小子集,若存在,输出子集的size,不存在则输出-1。

 题解:https://blog.csdn.net/ZscDst/article/details/80927194

① 由二进制可知,因为所有数字都是2的次幂,所以不存在我们选了C,而无法选B导致错过正确答案的情况。所以就是一个贪心,排序后从大到小贪心即可。

② 防止TLE,要用map存下同一个数出现的个数。按照题目范围确定循环长度。

盲点:除了上述两点

① 位运算 1<<30 位运算,左移30 即 1 乘 30次 2 。

② int类型在内存中占4个字节,也就是用32位二进制表示,不会爆 int 。

int类型正数上限二进制表示为0111 1111 1111 1111即(2^32)-1,表示0的符号位是0(即最高位是0):0000 0000 0000 0000

由于0已经被正数这一边表示了,所以负数的1000 0000 0000 0000就可以用来表示-2^32

原文地址:https://www.cnblogs.com/LLbinGG/p/9370966.html