![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解
文章平均质量分 59
reisen.inaba
我好菜啊qwq
展开
-
Fair Distribution(整除分块)
Fair Distribution 有n个机器人,m个能量条,能够进行两种操作,n–或m++,每次操作花费1美元,求使得m%n=0的最小花费 设n减少了x,则花费为∑n−(n−x)+(m−1n−x+1)∗(n−x)−m=∑n−m+(m−1n−x)∗(n−x),∑(m−1n−x)可以用整除分块O(n)来求得。对于[ni]设n减少了x,则花费为\sum n-(n-x)+( \frac{m-1}{n-x}+1)*(n-x)-m=\sum n-m+(\frac{m-1}{n-x})*(n-x),\sum(\frac原创 2021-07-27 20:32:52 · 949 阅读 · 0 评论 -
Tunnel Warfare(线段树)
有三种操作,D是删点,Q是询问点x还和几个点连着,R是恢复最近一次被摧毁的点。对点x,连接着的点的个数显然是右边最近的一个被摧毁的点的坐标减去左边最近的一个点的坐标再减1,即右区间最小值-左区间最大值-1。因为有更新和查询操作,所以可以想到用线段树。 初始化每个点的最大值为0,最小值为n+1,点被删时,最大值最小值等于自己的坐标。 代码 这里要吐槽一下.原创 2021-07-23 15:26:09 · 277 阅读 · 0 评论 -
通信线路(分层图)
最近写图论的时候看到的新玩意,之前好像还写了个分图层DP。从巨佬的博客上学了一下。还没有看完,到时候有时间慢慢看,先%%%再说。 巨佬博客(传送) 输入样例: 5 7 1 1 2 5 3 1 4 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6 输出样例: 4 题目 全是瞎扯,建议直接跳过 就大概是按照dp的思路建图,进行K个步骤的话就建K层互相联系的相同的图,比如第一层也就是原图是数字1-4,那么第二层就是数字1’-4’.连起来就是这样。(灵魂画手) 建立k层图.第k层和第k+1层图原创 2021-07-22 21:12:36 · 255 阅读 · 0 评论 -
Desert King POJ - 2728(01分数规划)
Desert King 大意为给出n个点和它的海拔,每条路的费用为两点的相对高度,求总费用比总路程的最小值。刚开始看到这题,上去就是贪心,然后就wa了,然后想了想发现确实不太能贪心,随便举个反例 50100,35,110,显然50100比35小,但是50+1100+10≈0.4636,而3+15+10≈0.2666\frac{50}{100},\frac{3}{5},\frac{1}{10},显然\frac{50}{100}比\frac{3}{5}小,但是\frac{50+1}{100+10}\appro原创 2021-07-21 16:46:05 · 67 阅读 · 0 评论 -
Slim Span POJ - 3522(最小生成树)
题目 要让生成树的最大边减最小边的值最小,直接枚举每条边为最小值时的差值,取最小差值。 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstrea原创 2021-07-21 11:42:21 · 53 阅读 · 0 评论 -
Gym - 103145K(并查集)
题目 给出一个图,然后每次询问给出敌人攻击值,低于攻击值的边都会被删去,每次询问独立,回答攻击过后还有多少对点连通。 看到连通首先想到并查集,但是问的不是连通块数,是连通块中点的对数,显然如果一个连通块有n个点,那么就有Cn2对点,Gn2=(n−1)n/2,所以只要稍微改动一下并查集代码,知道每个连通块点数,就能得到答案。C_n^2对点,G_n^2=(n-1)n/2,所以只要稍微改动一下并查集代码,知道每个连通块点数,就能得到答案。Cn2对点,Gn2=(n−1)n/2,所以只要稍微改动一下并查集代码,原创 2021-07-21 10:15:29 · 233 阅读 · 0 评论 -
P3758 [TJOI2017]可乐
用DP加O2优化卡过去的,过程十分痛苦,主要是内存爆炸(刚开始还想开三维DP )。 貌似正解不是DP,等我先学学再补上。 先上DP代码。 刚开始想的是dp[t][pos[[0/1/2]分别表示爆炸,不动,移动,然后写了很久样例都过不了,然后想到原地不动可以当成移动到自己(被题目骗了) 没有任何一条道路连接相同的城市,嗯,刚开始看到原地就想连接自己,看到这句话就渐渐想着不连接自己。 然后爆炸可以新建一个点0,所有点都可以到达0,但0只能到达自己,其实也可以让0不能到任何一点,但后面就需要循环t次,可能会.原创 2021-07-20 23:07:59 · 82 阅读 · 0 评论 -
Mondriaan‘s Dream(状压DP)
题目链接 思路 有一种1x2的砖块,问有多少种填满的方案。 砖块只能横着放或竖着放,设横着放为1 1,竖着为10_1^010, 显然上下不能有同位的0,并且每一行的连续1的个数减去上一行对应位置的0的个数后不能为奇数, 满足条件的就dp[i][j]+=dp[i−1][k]dp[i][j]+=dp[i-1][k]dp[i][j]+=dp[i−1][k].最后一行一定是填满的,所以答案是dp[h][(1<<w)−1].dp[h][(1<<w)-1].dp[h][(1<<原创 2021-07-20 10:53:29 · 87 阅读 · 0 评论 -
Physical Education Lessons-动态开点线段树
看到数据范围头就痛起来了,还抱着是不是打印错误的想法上去交了一发结果re,然后在本地捣鼓,开了个巨大的数组,直接给我clion卡退了,内存瞬间爆满。然后乖乖百度,发现了一个叫动态开点线段树的线段树,折腾了一会,看懂了但没有完全看懂(下次一定去认真学学 )。就大概是要用到的节点才会开这个点,其他的不管,据说空间复杂度O(nlogn)O(nlogn)O(nlogn). 代码 #include <iostream> #include <cstring> #include <cmat.原创 2021-07-19 22:15:48 · 214 阅读 · 5 评论 -
7.17训练
A - Time Limit 题目 这题巨水 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstream> #include <st原创 2021-07-19 09:36:40 · 330 阅读 · 0 评论 -
牛客小白月赛36
C-杨辉三角 题目 杨辉三角第n行第i个元素为Cn−1i−1,由二项式定理有(1+x)n=∑Cni∗xi,对两边求导,n(1+x)n−1=∑i∗Cni∗xi−1,继续求导,n(n−1)(1+x)n−2=∑(i2−i)∗Cni∗xi−2,令x=1,n(n−1)∗2n−2=∑i2Cni−∑iCni,易证∑Cni=n(n−1)∗2n−3C_{n-1}^{i-1},由二项式定理有(1+x)^n=\sum{C_{n}^{i}*x^i},对两边求导,n(1+x)^{n-1}=\sum{i*C_n^i*x^{i-1}}原创 2021-07-16 23:44:32 · 139 阅读 · 0 评论 -
暑训最短路(待补全)
A-Til the Cows Come Home 模板题 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstream> #include原创 2021-07-14 17:10:51 · 71 阅读 · 0 评论 -
Codeforces Round #732 (Div. 2)
A-AquaMoon and Two Arrays 题目 给出数列a、b,每次可以选取i,j,使得a[i]–,a[j]++.问是否能通过此操作使得a=b.(不需要使操作数最小) 直接暴力,记录c[i]=b[i]-a[i],如果∑cn\sum c_{n}∑cn!=0,就输出-1; 然后对每个c[i],直到它等于0为止一直对其++或–,在数列中找到c[j]–或++。 #include <iostream> #include <cstring> #include <cmath&g原创 2021-07-12 22:35:21 · 122 阅读 · 0 评论 -
牛客小白月赛34
A-dd爱科学1.0 传送门 贪心,要修改最少,先找到最长非递减子序列(就是LIS把大于号改成大于等于),剩下的就是最小的修改个数。 常规的LIS是 O(n2{n^2}n2) 的,然后发现有用二分优化的O(nlogn{nlogn}nlogn)的算法。 代码 #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include原创 2021-06-18 01:16:26 · 134 阅读 · 0 评论 -
Codeforces Round #722 (Div. 2) ABC
A.Eshag Loves Big Arrays 题目 题意: 每次都可以将子序列中大于平均数的数字删除,问最多可删除多少数字。 思路: 显然进行n次操作后只有最小值能留下来,记录最小值个数就行了。 代码如下: #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include <vector> #include原创 2021-05-25 10:30:18 · 103 阅读 · 0 评论 -
Codeforces 919C--Seat Arrangements
传送门 题意 有k个人想坐一起,即在同一行或同一列选取k个连续空位,’.‘表示空座位,’*'表示有人,问有多少种选法。 直接模拟。注意k等于1的时候会重复,答案要除以2。 #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include <vector> #include <cstdio> #inc原创 2021-05-20 20:45:12 · 93 阅读 · 0 评论 -
Codeforces Round #720 (Div. 2) AB
A - Nastia and Nearly Good Numbers 题目 题意: 求满足x+y=z并且x,y,z中的两个可以被A整除,一个可以被A*B整除的互不相同三个数x,y,z。 思路 很容易想到 A,A*(B-1),A*B是满足x+y=z和整除关系的,但是B=2的时候x=y,所以特判一下2就行了 #include <iostream> #include <cstring> #include <cmath> #include <set> #include原创 2021-05-19 23:45:19 · 61 阅读 · 0 评论 -
Beautiful Numbers
传送门 题意 对于数m,若存在l,r,使得[pl,pl+1…pr]为1-m的排列,则m是beautiful number。从1到n,若是 则输出1否则输出0. 思路 显然1是满足的,而m要满足条件则1-m的数的最大下标与最小下标的差为m-1。 可以用两个数来存当前的最大最小下标,从2-n顺序遍历。 代码 #include <iostream> #include <cstring> #include <cmath> #include <set> #include原创 2021-05-18 20:46:31 · 111 阅读 · 0 评论 -
Special Christmas Cake
思维 氵题 传送门 题意:判断正n边形能否一刀切成a边形和b边形(不需要是正多边形) 思路:观察后发现其实只有三种情况,a+b=n-2,a+b=n-3,a+b=n-4; #include <iostream> #include <cstring> #include <cmath> #include <set> //#include <unordered_map> #include <vector> #include <cstdio原创 2021-05-12 23:14:46 · 44 阅读 · 0 评论 -
营业额统计
营业额统计 题目 思路:要找到前i个数中最接近ai的数,只能是大于等于ai的最小值或者小于等于ai的最大值,想到用set来写,lower_bound能找到大于等于ai的最小值,也能退出小于最大值。 #include <iostream> #include <cstring> #include <cmath> #include <set> //#include <unordered_map> #include <vector> #incl原创 2021-05-12 22:47:00 · 93 阅读 · 0 评论 -
csust周赛 厂里吃鸡王
多起点最短路 题目链接 刚开始想跑n次最短路,结果 tle,其实只要跑k次最短路然后相加即可, 另外建一个点,并且和所以种类为i的建筑建一条长度为0的边,然后跑最短路即可。 代码 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #include <que原创 2021-04-01 21:45:08 · 103 阅读 · 0 评论 -
csust周赛 摆蔬菜1
二分+RMQ ST表zkw线段树 题目链接 二分区间,然后查询区间最值,符合条件就记录该区间和,然后输出符合条件中的最大区间和 建议用st表,之前用线段树t傻了,然后zkw线段树也比传统线段树快些。 ST表 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #i原创 2021-04-01 21:35:09 · 106 阅读 · 0 评论