摘要:
Longest Subarray "题目传送门" 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过。给定区间内的数字范围是1~c。 如果r为右边界,对于一种数字x,满足条件的左边界l的范围是r左边第一个x出现的位置+1(即这段区间内没有出现过x,如果x在1~r 阅读全文
摘要:
Fansblog "题目传送门" 解题思路 Q! % P = (P 1)!/(P 1) ... (Q 1) % P。 因为P是质数,根据威尔逊定理,(P 1)!%P=P 1。所以答案就是(P 1) ((P 1) ... (Q 1)的逆元)%P。数据很大,用__int128。 代码如下 cpp inc 阅读全文
摘要:
Find the answer "题目传送门" 解题思路 要想变0的个数最少,显然是优先把大的变成0。所以离散化,建立一颗权值线段树,维护区间和与区间元素数量,假设至少减去k才能满足条件,查询大于等于k的最少数量即可。 代码如下 阅读全文
摘要:
Distribution of books "题目传送门" 解题思路 求最大值的最小值,可以想到用二分答案。 对于二分出的每个mid,要找到是否存在前缀可以份为小于等于mid的k份。先求出这n个数的前缀和sum\[],dp\[i]表示前i个可以构成的最大份数。初始化dp\[1~n]为 1,dp\[0 阅读全文
摘要:
sequence "题目传送门" 解题思路 用单调栈求出每个a\[i]作为最小值的最大范围。对于每个a\[i],我们都要乘以一个以a\[i]为区间内最小值的对应的b的区间和s,如果a\[i] 0,则s要尽量大,如果a\[i] define INF 5223372036854775807LL usin 阅读全文
摘要:
[BeiJing2011]元素 "题目传送门" 解题思路 把矿石按照魔法值从大到小排序,然后按照顺序构造线性基,如果可以构造就把答案加上去,不能就不加,最后得出的就是真确答案。因为是从大到小构造的,所以不可能把已经构造好的减掉,损失一定更大。 代码如下 cpp include define INF 阅读全文
摘要:
Crazy Binary String "题目传送门" 解题思路 把1记为1,把0记为 1,然后求前缀和,前缀和相等的就说明中间的01数一样。只要记录前缀和数值出现的位置即可更新出答案。 代码如下 cpp include define INF 0x3f3f3f3f using namespace s 阅读全文
摘要:
Magic Line "题目传送门" 解题思路 因为坐标的范围只有正负1000,且所有点坐标都是整数,所以所有点相连构成的最大斜率只有2000,而我们能够输出的的坐标范围是正负10^9。所以我们先把这n个点按照x轴从小到大,x相同的再按照y轴从大到小排序,然后取第n/2个点,在这个点上做一条斜率极大 阅读全文
摘要:
Eddy Walker "题目传送门" 解题思路 因为走过所有的点就会停下来,又因为是从0出发的,所以当n 1时,在0停下来的概率为0,其他的为1/(n 1); 代码如下 cpp include define INF 0x3f3f3f3f using namespace std; typedef l 阅读全文
摘要:
LRU management "题目传送门" 解题思路 用map索引对应地址,用双向链表维护序列。 代码如下 阅读全文