![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CF
文章平均质量分 79
IcecreamArtist
咸鱼
展开
-
bitmask集合
SOS dp+randomizationD. Love-Hate题意:找一个最大的硬币集合,满足:n(1e5)个中至少n/2个人有全部这些硬币。(答案大小不超过15)思路:看到n/2:考虑randomization。随机选30个不重复的人,都不属于某个大小为n/2的集合的概率为1/{2^30}。于是我们可以随机选一个人。认为这个人在最优解中。那么最大的硬币集合肯定是这个人喜欢的硬币的子集。我们把这个人喜欢的硬币离散化(设为sz)。然后遍历所有sz的子集。找到{满足【n/2个人都有这子集】的集原创 2021-06-01 19:13:04 · 133 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2) D. Cut and Stick
题意一个数列,m次查询。每次询问一个区间。要把该区间拆成若干个出现次数最多的数出现次数小于等于ceil(n/2)ceil(n/2)ceil(n/2)的子序列,问最少拆成多少个子序列。思路若出现次数最多的数的出现次数小于等于ceil(n/2)ceil(n/2)ceil(n/2),答案显然是1。对于其他情况,有一种拆分方式:设出现最多的数是super,其出现次数为f。其他数一共有m-f个(m为区间长度)。拆成1+(f−(m−f+1))1+(f-(m-f+1))1+(f−(m−f+1))个,即m−f+1m原创 2021-04-20 21:28:41 · 101 阅读 · 0 评论 -
【codeforces上紫】杂题/数据结构
E. Correct Placement题意:每个人两个属性:高度和宽度。对于每个人,找另一个宽度和高度严格小于他(可以那个人的宽度和高度分别小于他的宽度和高度;也可以那个人的高度和宽度分别小于他的宽度和高度)的人的编号。数据范围2e5。思路:一开始看到有两个属性,想起二维偏序问题,但是树状数组等二维偏序问题是用来解决计数问题的。此题需要给出一个答案,则无法使用。后来想到有非常简单的方法,先按一个属性排序,然后遍历数组,维护当前之前的第二个属性的最小值及其编号。然而问题有两个情况,即宽度和高度互换又可以原创 2021-02-03 22:31:12 · 381 阅读 · 0 评论 -
【codeforces上紫】数学
cf691div2 E. Latin Square题意给一个方矩阵,每一行每一列都是一个1~n的permutation,有m次操作,输出操作后的矩阵。(模n下)R: 每个数右移一位L: 每个数左移一位D: 每个数下移一位U: 每个数上移一位I: replace the permutation read left to right in each row with its inverse.C: replace the permutation read top to bottom in ea原创 2020-12-23 13:50:50 · 138 阅读 · 0 评论 -
【codeforces】一切为了上分:骚操作合集
今早一看 稳在了青名(别骂我菜似乎能够往蓝名看齐了。继续加油。B. Putting Bricks in the Wall大意:起点和终点附近有四个格子。要保证起点附近的两个格子都是1或都是0;同时终点附近的两个格子都是0或都是1.(起点和终点的格子不一样。)输出修改操作次数,和哪些格子要修改。漂亮的模式化代码:#include<bits/stdc++.h>using namespace std;#define fi first#define se second#define U原创 2020-10-19 16:41:56 · 1230 阅读 · 0 评论 -
【组合数学】D. Rescue Nibel! -- codeforces round #672 (Div. 2)
传送门题意有n条线段,给出起点和终点。我们需要找the number of sets of k segments such that these k segments intersect at least in one point.思路从左往右遍历,当遇到一个新的线段的起点,且当前位置的线段数目大于等于k,则在剩下cnt-1条中选出k-1条,与当前线段贡献一个set。代码#include<bits/stdc++.h>using namespace std;#define fi原创 2020-09-27 19:38:48 · 104 阅读 · 0 评论 -
codeforces round #670 (Div. 2)
传送门前言刚开始状态不好,一个小时后才进入状态。。然而没时间惹。果断掉分掉段位,这应该是CCPC前的最后一场cf了。接下来就补补题,刷刷算法吧。写这份文章是因为这次比赛我写的A和B被很多人尝试hack,但最后还是我对了。说明我的思路可能简化程度高,有迷惑性,因此记录一下。A. Subset Mex题意把一个数组分成两份,求得这两份的最大的在数组中未出现的非负数。这两个非负数之和最大可以是多少?思路一开始就想到是第一份按顺序装,第二份放第一份重复的。然后在这两份中找最小未出现。但是思路没有理原创 2020-09-13 10:39:42 · 316 阅读 · 0 评论 -
codeforces round #668 (Div. 2)
传送门前言段位给我抖掉了()我真是个菜鸡(哭)B. Array Cancellation思路正解答案是最大后缀和。题解有证明,反正我是没想出来()证明大意:观察发现,(1)免费的操作只会造成区间后缀和的增加。(2)最终结果要求全0,此时后缀和都为0。因此,花费至少是初始状态中的最大后缀和。那么为什么花费是最大后缀和(设为M)的时候刚好可以满足条件呢?此时可以这样操作:花费M,将1号提升M,n号降低M。此时,后缀和(除了第一个)全体下降M。显然,此时所有后缀和<=0;然后,从原创 2020-09-07 22:38:56 · 135 阅读 · 0 评论 -
codeforces round #666 (Div. 2)
传送门恭喜自己又上分了大概是因为以前太菜了而且咕咕咕了好几个月B. Power Sequence知识点brute force题意给一个数字序列,可以交换顺序,要找一个基底c,使得此数字序列最接近c0,c1,c2,c3...c^0,c^1,c^2,c^3...c0,c1,c2,c3...。给出与这个最接近数列的距离。思路我 想 了 一 万 年。但心想:这不就是个第二题不可能用到高级数学差点往线代和高数那边跑了知识的吧不可能吧;二分答案好像也不现实;模拟退火也不至于吧 。很显然暴力枚举会有O(原创 2020-08-31 10:22:26 · 112 阅读 · 0 评论 -
【brute force/two pointers+divide and conquer/rmq】 educational codeforces round 94
题意:思路:把问题转化为map来看:找(ai,aj)=(ak,al)(a_i,a_j)=(a_k,a_l)(ai,aj)=(ak,al)的个数数据小:双层循环:外层从后往前遍历kkk,再从kkk往前遍历iii第二层循环过程中途径的都是aja_jaj,记录多少个aj=ala_j=a_laj=al。遇到ai=aka_i=a_kai=ak时,贡献为遍历途中多少个aj=ala_j=a_laj=al代码:#include<bits/stdc++.h>using n原创 2020-08-26 11:20:35 · 134 阅读 · 0 评论