想法题
文章平均质量分 55
JK Chen
ACM退役选手,战绩4金6银
展开
-
K-Fenced In(最小生成树性质 连通性)
http://www.usaco.org/index.php?page=viewproblem2&cpid=625题意:有一个(0,0)(A,B)的矩阵,然后有n条横线,m条竖线。这些线的交点之间的线段可以被一次性删除。这些线得到了(n+1)(m+1)个空间,问让所有空间联通的删除线总长度最少。代码:由克鲁斯卡尔得最小生成树可知,所有线段之间,从小到大删除是没问题的。可以一组线同时删除:删除时可能有一些空间本身就联通,例如下图中尝试删除当前列时,134已经联通,所以只需要删除4−(3原创 2020-10-04 16:26:43 · 204 阅读 · 0 评论 -
G-Field Reduction(想法)
题意:给n个点,删除3个后使得围住所有点的矩形的面积最小。解析:假设已经得到了当前的矩形,每次删除点肯定是边界上的。所以所有可能删除的点位:x最小的3个,x最大的3个,y最小的3个,y最大的3个。用set维护一下即可。代码:...原创 2020-10-04 16:26:04 · 219 阅读 · 0 评论 -
A-262144(想法)
题意:给出一个数组,每次可以选择相邻的两个相同的数字X变为X+1,求最终数组中最大的数字。解析:从最小的数开始做(第一次做1,第二次做2……),如果有连续的偶数个就直接合并(1111→221111\to221111→22),奇数个可能往两边连所以可以(11111→2212211111\to2212211111→22122)代码:...原创 2020-10-04 16:25:41 · 179 阅读 · 0 评论 -
Omkar and Landslide(想法 二分)
http://codeforces.com/problemset/problem/1392/F题意:解析:从后往前做,当前位置-1,前面位置+1,所以若前面两个数相同现在也会不相同(AAB变为ABB),所以可以得出答案序列没有超过1对的相同的数。所以做法就是定下相同的位置,其它位置都是差为1,这个就可以用二分得出。代码:/* * Author : Jk_Chen * Date : 2020-09-11-08.11.23 */#include<bits/stdc++.h&g原创 2020-09-11 08:33:00 · 223 阅读 · 0 评论 -
Investigating Legions(想法 不确定问题)
https://ac.nowcoder.com/acm/contest/5669/I题意:n个人,m(未知)个团,给出两两是否属于相同团。但是有1/S的几率给出的是错误的(01互换)。问最后哪些人属于一个团。输出按照字典序最小来,人数比和团数比为1:30。解析:很玄学,这题数据是随机生成的。由于保证了一个团大致有至少30个点,所以可以这么做:可以选择一个点,和他为1的先加进去,然后去掉和其他点0较多的点,再加入和团内点1较多的点代码:/* * Author : Jk_Chen *原创 2020-07-25 17:43:48 · 273 阅读 · 0 评论 -
Perfect Flush(单调栈 想法)
https://nanti.jisuanke.com/t/45345题意:给出n个数∈[1,k]\in[1,k]∈[1,k],找出它的子序列中,字典序最小的排序。解析:从前往后做,维护单调递增的栈。假设当前进栈的点是这种数里面的最后一个,说明一定要取。此时栈内的所有元素都需要取(不取的话字典序会变大)。只需要在弹出的时候判断栈顶元素是否可以弹即可。代码:/* * Author ...原创 2020-05-05 14:32:04 · 558 阅读 · 0 评论 -
F. Restore the Permutation by Sorted Segments(想法)
http://codeforces.com/contest/1343/problem/F题意:有一个不知道的排序,对于每个前缀i∈[2,n]i\in[2,n]i∈[2,n],有一个排序好的后缀(大于1的长度,长度不定),现在给出这n-1个后缀,求原排序。n最大200解析:枚举第一个,那么就可以一个一个推出下一个代码:/* * Author : Jk_Chen * Da...原创 2020-04-22 21:19:24 · 1093 阅读 · 6 评论 -
JT 的战争(因子数的奇偶性)
https://turingjudge.com/contest/3/problem/1003QkCvNnnjg5一个数的因子数的奇偶性很好判断,比方说16=1*16=2*8=4*4,容易看出,平方数才是奇数个因子。代码:int main(){ int t=rd; while(t--){ int n=rd; int q=(int)round(...原创 2020-04-21 18:50:51 · 331 阅读 · 0 评论 -
leetcode 295. 数据流的中位数(优先队列 想法)
https://leetcode-cn.com/problems/find-median-from-data-stream/题意:给一个字节流,找出中位数解析:维护两个size几乎相同的堆,较大的一半数放在小顶堆,较小的一半数放在大顶堆。中位数由两个堆顶元素决定。代码:class MedianFinder {public: MedianFinder() {} pri...原创 2020-04-12 13:42:22 · 185 阅读 · 0 评论 -
I. Graph and Cycles(图论)
https://www.jisuanke.com/contest/7196/466924题意:给出一个n个点带权无向完全图,对于一个环(只考虑边可以有重点),其权值为任意两条相邻边的权值max的和。现在将图分成多个环(无边交集,并集为完全图),图的值为每个环的权值之和,求其最小值。解析:思路:每条边,如果其权值大,那么尽可能接连权值较大的边。将边按照权值排序,从大的开始取。对于当前边...原创 2020-04-12 13:05:31 · 448 阅读 · 0 评论 -
K - Klingon Warfare(后缀数组 想法 子树相同)
https://vjudge.net/problem/Gym-101655K题意:给出两棵树,点上有字母,每个点的儿子之间有固定的顺序(先来的在左边)。问两棵树的最大siz完全相同子树的siz。解析:先建好树,考虑怎么压缩表示子树。两个子树完全相同当且仅当dfs序列相同。两个大串,即使有两个子串相同,也不一定是表示一个子树。所以我们加上类似括号的标识符:好处是匹配长度是字母长度的3倍,...原创 2020-03-21 17:19:22 · 193 阅读 · 0 评论 -
D. Reachable Strings(想法 哈希hash)
http://codeforces.com/problemset/problem/1320/D题意:给一个01串,每次询问两个子串是否可以转换。转换操作为不限次数的011与110互换。解析:对于一个串的0序列,再人任意次操作后,0序列的每个0的奇偶性都不会变化。所以可以hash0的奇偶性。(直接hash[i]=hash[i-1],如果是0再变化会比较方便,不需要lowerbound了)...原创 2020-03-18 16:15:58 · 211 阅读 · 0 评论 -
F. Kuroni and the Punishment(最少操作使gcd>1 概率问题 想法)
http://codeforces.com/problemset/problem/1305/F题意:有n个数,每次操作可以使某个数加一或者减一,使gcd>1的最少操作数量解析:我们可以O(n)求出,调整最后gcd为素数P的倍数的最少操作数。问题是这个P。由于素数2的存在,我们可以得出操作数至多为n。考虑现在将n个操作分配给n个数,所以可以得出结论:至少存在n/2个数,其最后变为i...原创 2020-03-05 16:44:54 · 595 阅读 · 0 评论 -
Longest Path(图论)
https://nanti.jisuanke.com/t/43394题意:给出一个完全图,任意两个点之间有且只有一条有向边,求一个最长简单路径。解析:维护答案路径。对于新的点,如果可以塞在开头则塞在开头(指向原开头)。如果可以塞在最后则塞在最后(原结尾指向该点)。否则考虑拓边(A-B变为A-C-B)。证明:代码:/* * Author : Jk_Chen * Date ...原创 2020-02-27 12:56:22 · 942 阅读 · 0 评论 -
J - Mobilization(想法 数学)
https://vjudge.net/contest/358616#problem/J题意:n种物品,最大花费为m,每种有cost和ab值,无限数量(可以买分数个),最后的答案为suma∗sumbsum_a*sum_bsuma∗sumb,求最大值解析:分数用来统一cost,即算出每个物品每单位cost的a和b。有用的物品形成凸包:我们分析相邻3个点ACB,找到C在AB上的投影C’...原创 2020-02-23 16:42:19 · 329 阅读 · 0 评论 -
Good Bye 2019 F. Awesome Substrings(字符串 分块 Hash表)
http://codeforces.com/problemset/problem/1270/F题意:给出一个01串,一个子串要求:字符串长度为内部1的数量的倍数,至少一个1。问有多少个。解析:子串[l+1,r][l+1,r][l+1,r],要求r−l=K(Fr−Fl)r-l=K(F_r-F_l)r−l=K(Fr−Fl),其中FiF_iFi为前缀的1的个数。K≤nK\leq\sqr...原创 2020-02-20 11:07:53 · 214 阅读 · 0 评论 -
E. Not Same(构造)
http://codeforces.com/problemset/problem/1261/E题意:给出n个数,可以取n+1次,每次可以在一些数中取1个。任意两个取的集合不能相同。解析:先按照下面放好,接下来从1开始往上填,如果还有多,从下面开始往上填。需要排序(假设交换位置),左边那一列要最多。代码:/* * Author : Jk_Chen * Date : 202...原创 2020-02-19 16:51:45 · 313 阅读 · 0 评论 -
E. Divide Points(想法 黑白染色 坐标转换)
http://codeforces.com/problemset/problem/1270/E题意:给出n个点,分成两个阵营。要求:两个阵营之间的点的欧式距离不能与阵营内部的点的欧氏距离相同。解析:距离平方组成:dx2+dy2dx^2+dy^2dx2+dy2,奇奇得偶,偶偶得偶,奇偶得奇。x+y为偶的阵营内部,dx,dydx,dydx,dy是奇奇或者偶偶x+y为奇的阵营内部,dx,d...原创 2020-02-17 12:32:18 · 259 阅读 · 0 评论 -
D. Irreducible Anagrams(想法)
https://codeforces.com/problemset/problem/1291/D题意:求一个子串,是否存在一个同构串(字母组成相同),不可约可约当且仅当存在一个前缀同构解析:所有相同字母不交叉的情况下,使得所有线都交叉,则存在一个同构串不可约。画了一下,当种类大于2时一定存在。种类为2时,两端字母相同的不存在,不同的存在。代码:/* * Author : Jk...原创 2020-02-03 22:20:25 · 520 阅读 · 0 评论 -
E. K Integers(树状数组 邮件问题)
https://codeforces.com/problemset/problem/1269/E题意:给出一个序列,每次可以交换两个相邻的数。对于每一个i∈[1,n]i\in[1,n]i∈[1,n],求某个子段为1,2...i1,2...i1,2...i的最少交换次数。n最大2e5解析:假设定下最后的1,2...i1,2...i1,2...i出现的段的位置k+1,k+2...k+ik+1...原创 2020-02-03 13:59:54 · 331 阅读 · 0 评论 -
D. Domino for Young(格子染色问题)
https://codeforces.com/contest/1269/problem/D题意:给出一个单调不增的格子列,用1*2或者2*1的格子去填,问最多多少个。解析:假设如上方式染色,那么填充的条一定是一黑一白。大胆猜测数量为黑白格子中较少的那个。代码:/* * Author : Jk_Chen * Date : 2020-02-02-12.43.33 */#...原创 2020-02-02 12:53:17 · 517 阅读 · 0 评论 -
E. Messenger Simulator(莫队 区间不同的数个数 想法)
http://codeforces.com/contest/1288/problem/E题意:给出一个序列1到n,现在有m次操作,每次将一个数提到序列首。问每个数的最大位置和最小位置。解析:最小位置:被提过为1,否则为起始位置最大位置:先看PPP第iii次提到队首和第i+1i+1i+1次,显然此时可能产生的最大值为:操作序列两个位置中间出现的所有其他数的种数,即区间不同数的个数。而P...原创 2020-01-16 15:33:08 · 307 阅读 · 0 评论 -
E. Delete a Segment(想法 单调栈 二分)
http://codeforces.com/contest/1285/problem/E题意:给出很多一维线段,两段线段可以合并当且仅当有交集。现在给出n段线段[l,r],求删掉一段后再合并,最多可以剩下几段。解析:先按照起点排序。假设删除段xxx,想办法得出[1,x−1][1,x-1][1,x−1]的段数,已经可以延到的右界。维护右边的段数和每一段的起点。那么答案就是numl+num...原创 2020-01-15 14:40:25 · 474 阅读 · 0 评论 -
1287D - Numbers on Tree(构造 想法 树)
http://codeforces.com/problemset/problem/1287/D题意:给出一棵树,每个点有值(要自己构造),告诉了你每个节点的子树中有多少个节点的值小于它。解析:尝试用1到n去填空。从上往下dfs,如果一个节点的小于它的个数为C,那么我选择剩余数字序列中的第C+1小的数,以此类推。这样做直接满足了C的定义。代码:/* * Author : Jk_C...原创 2020-01-09 11:47:13 · 370 阅读 · 0 评论 -
E. XOR and Favorite Number(莫队 前缀异或和)
http://codeforces.com/problemset/problem/617/E题意:给出n个数,每次查询一个区间[L,R][L,R][L,R],求内部有多少个子区间,其异或值为KKK。解析:采取莫队的做法,假设当前[L,R][L,R][L,R],变为[L−1,R][L-1,R][L−1,R],那么得到的区间为以L−1L-1L−1为左端点,右端点∈[L−1,R]\in[L-1,...原创 2019-11-18 21:21:23 · 263 阅读 · 0 评论 -
B. Looksery Party(想法题)
http://codeforces.com/problemset/problem/549/B题意: 给出n行n列,每行可以选或者不选,敌人给出每列和的预测,最后的每一列的和要求没有一个是被敌人预测到的。保证i行i列为1。解析:假设所有预测都不是0,那么全部不选即可。如果有0,那么如果我们选择那一列对应的行,因为i行i列为1,所以减去那一行后当前值变为-1,以后不会变为0了。重复这个过程,...原创 2019-11-11 21:31:34 · 358 阅读 · 0 评论 -
E. Transmitting Levels(全局上界分析)
http://codeforces.com/problemset/problem/526/E题意:有1e6个点组成的圈,50次询问,每次给出一个b,要求将圆分成最少的段数,使得每一段的和不超过b。解析:每组询问只能O(n)O(n)O(n)处理。先预处理出每个点所能走到的最远的点。假设x走到y-1,即(∑i=xy−1ai)≤b,(∑i=xyai)>b(\sum_{i=x}^{y-1}...原创 2019-11-08 14:23:24 · 291 阅读 · 0 评论 -
E2. Voting (Hard Version)(优先队列 买卖决策)
http://codeforces.com/problemset/problem/1251/E2题意:有n个人,每个人有一个m,val,征服这个人需要val,如果你至少征服了其它m个人,则可以直接征服这个人,问征服所有人的最少花费。解析:以前多校做过类似的一道题,做法是按照顺序,先将当前的点买了,然后加入反悔队列,到了后面如果多余了从队列中选一个花费最大的退掉。这道题也差不多,我们将...原创 2019-10-28 21:25:21 · 364 阅读 · 0 评论 -
C. Nikita and stack(栈操作 想法 线段树)
http://codeforces.com/problemset/problem/756/C题意: 给出n个操作,每个有一个序号。对于每个前缀,求出这些操作按照序号排序后进行操作,结果中栈顶元素是什么。解析: 考虑序号为x的操作,压入元素y,对于包含x的所有前缀,序号大于x的操作刚好完美匹配时,栈顶元素才为y。序号为x的压入操作,区间[1,x]加1。序号为x的弹出操作,区间[1,x]减1...原创 2019-10-25 15:31:56 · 237 阅读 · 0 评论 -
CodeForces-768B Code for 1 二分搜索线段
原题:Code for 1题意:给定一个数N,对大于1的数在原来的位置拆分为N/2,N%2,N/2三个数。对拆分出的大于1的数同样进行拆分,直至所有的数均为0或1。对拆分后的0/1序列,询问L到R区间中1的数量。看到这题,我直接想都没想就直接模拟了,(可能比赛的时候脑子属于装饰品)结果理所当然ML了。后来才知道其实不需要还原最后的串就可以解答,直接用dfs做就可以了,先到了这题真的很水...原创 2018-02-14 20:34:22 · 583 阅读 · 0 评论 -
模拟消灭星星
原题:消灭星星题意:输入这个矩阵代表,不同的数字代表星星不同的颜色,然后是m次点击,消法同消灭星星游戏思路:对于这个矩阵用什么保存,是一个非常困扰人的问题。选择的数据结构需要完成以下几项任务:对于单列来说,能够删除一个点,并且使这个点后面的数往前移一位对于整个图来说,能够在一列为空的情况下,把空白列后面的列往前移一列发现列和图的维护非常相似,都需要挪位,所以我想到了两种结构:...原创 2018-02-24 18:14:16 · 822 阅读 · 0 评论 -
子列按字典序排序
原题:Subset sequence题意:有数列1…n,求所有子列中按照字典序排列排在第m的子列分析:如果用next_permutation一个一个来的话,n最大为20,肯定会T,所以这道题只能找规律了。next_permutation虽然不能做题,打表找规律还是可以的,下面有打表的代码#include&lt;iostream&gt;#include&lt;cstdi...原创 2018-02-25 15:33:25 · 1023 阅读 · 0 评论 -
田忌赛马
原题:1342–赛马–中级题意:如田忌赛马,求田忌通过这n匹马可以赢的场数的最大值解析:sort一遍,先比较最小的,如果最小的马之间田忌可以赢一场,那么就比掉;然后同样的道理比最大的;如果还不行的话,再拿田忌的弱鸡马消耗掉王的宝马(当然排除掉相同的情况才能消耗)。其实这道题有很多其他的方法也可以求,但是要小心别错在了相同的情况。当然了,这个方法应该是最优的,不管是时间还是空...原创 2018-03-05 18:32:17 · 1056 阅读 · 0 评论 -
H - Hacker, pack your bags!
原题:822C题意:给你n段线段,每段线段有一个花费,例如2~5花费为3,找两段不重复的线段,长度加起来为k的,使这两段的花费之和最小。注意2~5和5~6算重复。思路:L,R&lt;2*10^5,那么我们可以遍历时间点。用num[i]表示当前时间点前的长度为i的线段的最小花费。每次循环先求出左端点在这个点的旅券的长度len,那么花费就是num[x-len]+cost。再求右...原创 2018-03-07 13:17:23 · 374 阅读 · 0 评论 -
牛宫 单调栈
原题:牛宫——中级题意:在给定矩阵中取一个面积最大的要求矩阵(所有格子数之和大于等于0)解析:首先不能暴力遍历所有矩阵,n^4会T,我们可以先定矩阵的左右边界,时间最坏为n^2。对于每次情况,我们从上往下把边界内一行的数据加到变量sum里面(前缀和),假设我们加到了第k行,首先考虑从第一行到第k行所以能不能满足大于等于0,如果不行,我们再考虑从第一行开始删除几行,使最后得到的矩...原创 2018-03-07 20:54:20 · 528 阅读 · 0 评论 -
模拟栈
原题:Joint Stacks题意:三种操作,pop,push和merge,merge时按照元素的进栈先后排序解析:用set存下元素出现的时间,开始的时候set[0]A,set[1]为B,posa为0,!posa为1,在merge的时候如果元素多的往元素少的堆转移的时候,我们还是把少的加入多的堆,然后posa=!posa即可。代码:#include&lt;stdio.h...原创 2018-03-12 19:52:17 · 273 阅读 · 0 评论 -
Mike and distribution(取数组一半大于另一半)
原题:CodeForces - 798D题意:给你两个序列 从中选出n/2+1个相同下标的数 使得两个序列的和 大于各自序列和的一半 题目保证有解解析:如果n是奇数 ,就先把第一个选进去 然后两个两个的for 对于相邻的两个 选取B大的那个,然后就能保证a的和大于序列和的一半 因为a1&gt;max(a2,a3) min(a2,a3)&gt;max(a4,a5)…...原创 2018-03-14 22:37:39 · 398 阅读 · 0 评论 -
Suspects
原题:CodeForces - 156B题意:一个人犯罪,n个人m个说了真话,+n:n是罪犯,-n:n不是 判断每个人说的话的真假解析:枚举每个人是罪犯的情况有以下要求才能实现:判断i为罪犯时怎么求说真话人数 用d数组存说i为罪犯的人数,nd存说i不是的人数,sum_no存所有说不是的人数,那么真话人数==d[i]+(sum-nd[i])判断每个人说的话 存下每个...原创 2018-03-22 08:44:59 · 402 阅读 · 0 评论 -
进制转换 负进制问题
原题:zjnu 1200题意:把一个数转化为负进制(-2~-20)并输出解析:可以通过负进制之间的加减转化成正进制,eg:-3进制下,有1,-3,9,-27。。。假设我们需要-3,就把一个9加上两个-3,就得到了3。另外负数的情况,我们加上一个正数,转化成正数就可以做了代码:#include&lt;iostream&gt;#include&lt;stdio.h&g...原创 2018-04-10 16:23:15 · 451 阅读 · 0 评论 -
zzq的离散数学教室1
原题:2018年长沙理工大学第十三届程序设计竞赛 D题意:给定一个区间,找出有几组满足以下要求的数a,b使得b和a之间找不到c使c%a==0&amp;&amp;b%c==0解析:a和b相除一定是一个素数刚开始想从a入手,对于每个a找出区间里所有的b,用上了素数筛,树状数组,前缀和等等还是过不了,后来从质数入手,才过对于一个质数J,计算出区间[L,R]内有多少数乘J还在区...原创 2018-04-17 18:46:51 · 613 阅读 · 0 评论