- 博客(85)
- 收藏
- 关注

原创 ACM历程(持续更新)
2019/09/27 注册洛谷,正式接触编程2019/11/20 第四届“深信服杯”上海第二工业大学新生程序设计大赛第三名2020/01/22 洛谷200AC2020/01/22 第一场CF Codeforces Round #615(Div. 3)2020/03/21 洛谷300AC...
2020-04-05 18:16:39
562
1
原创 历届蓝桥杯题解合集
第十一届蓝桥杯省赛C/C++ A组C/C++ B组Java A组Java B组Python组第十二届蓝桥杯省赛C/C++ A组C/C++ B组Java B组Python组第三届-第十届蓝桥杯省赛声明:合集内题解均为转载
2021-11-21 18:53:11
1250
原创 Ubuntu设置自定义分辨率并开机自启
打开终端输入cvt 2560 1440(自定义分辨率)得到:Modeline "2560x1440_60.00" 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync输入xrandr结果中包含显示器名称,如:Virtual1输入:sudo xrandr --newmode "2560x1440_60.00" 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync.
2021-08-29 19:08:50
853
1
原创 2020ICPC昆明-I.Mr. Main and Windmills(计算几何) -- 叉乘求两直线交点
Mr. Main and Windmills题意:火车从sss向ttt运动,在轨道的一侧有nnn个风车,当火车到达某一点的时候,风车的相对方向会发生改变。例如:aaa原本在bbb的左边,火车运动到某一点时,从火车的视角,aaa出现在了bbb的右边。mmm次询问,每次询问输出一个坐标,对于hih_ihi风车而言,恰好发生了kik_iki次方向改变。题解:例如aaa和bbb风车,当它们的相对位置改变时,火车应位于直线ababab和直线ststst的交点处题目就转变为:求hih_ihi和其他风车所
2021-04-08 22:47:31
477
原创 第十七届程序设计大赛暨蓝桥杯校内选拔赛
银行业务队列简单模拟题解:队列模拟,注意编号奇数到A,偶数BCode:#include <bits/stdc++.h>using namespace std;queue<int> q1,q2;int main(void) { ios::sync_with_stdio(0); int n; cin>>n; for(int i=1;i<=n;i++) { int x; cin&g
2020-12-30 16:18:17
1202
1
原创 CF1459D.Glass Half Spilled(DP)
D. Glass Half Spilled题解:对于每个kkk,假设SSS为选取的杯子集合,SaS_aSa为选取杯子的总容量,SbS_bSb为选取杯子的当前水量,BBB为全部杯子中的总水量,为使这kkk个杯子的水量最多,最优的选择是将其他杯子中的水全部倒入这kkk个杯子中,结果为min(Sa,B/2+Sb/2)min(S_a,B/2+S_b/2)min(Sa,B/2+Sb/2)。根据这个式子可以得知,当SaS_aSa确定时,SbS_bSb越大一定不会使结果变劣。问题就转变为,选取kkk个杯
2020-12-21 16:04:03
497
原创 “菜鸟杯”华中师范大学程序设计新生赛 F-你猜我是签到吗?(贪心+模拟)
你猜我是签到吗题解:很显然,一个形如010的串可以对结果产生2的贡献,10或01对结果产生1的贡献0110,与010产生的贡献是一样的,题意要求二进制数最小,所以应该避免这样的形式从后向前模拟就好了,如果m为奇数,就在1或n的位置的放一个1。为偶数时,如果前一个位置为0且该位置可以放1,就在该位置放1这样会有一个特殊情况,比如3 2 1 2这组样例,输出"QAQ!",但实际上是有解的:101。在赛场上没有想到怎么简便的处理这种情况,赛后一想,好像加个特判就行了:1和n都可填且2和n-1的位置都为0
2020-12-20 14:47:29
254
1
原创 2020第五届上海第二工业大学新生程序设计竞赛
A-迎新小游戏——抽奖品命题人:19计科C1 占淼题解:概率通过组合数求得:Ca2Ca+b2‾\begin{aligned}C_{a}^{2}\\ \overline{C_{a+b}^{2}}\end{aligned}Ca2Ca+b2,化简得:a×(a−1)(a+b)×(a+b−1)\dfrac{a\times \left( a-1\right) }{\left( a+b\right) \times \left( a+b-1\right) }(a+b)×(a+b−1)a×(a−1)记m=a
2020-12-10 00:13:00
2912
9
原创 CF1452D. Radio Towers(DP)
Radio Towers题意:有一个长为n的线段,每个点设置被信号塔的概率为0.5,每个信号塔可以覆盖一个以自己为中心的奇数线段,覆盖范围不可重叠,请问存在解的概率题解:每个位置都有等概率设置或不设置,共有2n2^n2n种情况,且等概率关建点是求有多少情况可以存在解考虑DP,枚举前面的合法状态去更新,因为必须是奇数段,所以就是前-1,-3,-5…的情况数之和,这个和可以用前缀和来维护,注意奇偶需要分开之后就费马小定理求逆元就行了Code:#include<bits/stdc++.h&
2020-12-01 22:25:43
350
原创 2018新生赛-还是简单题
还是简单题题意:给定两个数,忽略左右移的情况下,需要几次加减法可以得到他们的乘积。题解:对于a*b,可以将a或b转换为二进制并拆解,以b为例假设b等于21,转换为二进制:10101,则21=24+22+2021=2^4+2^2+2^021=24+22+20a∗b=a∗(24+22+20)=a∗24+a∗22+a∗20=(a<<4)+(a<<2)+(a<<0)a*b=a*(2^4+2^2+2^0)=a*2^4+a*2^2+a*2^0=(a<<4)+(a
2020-11-28 19:05:55
251
原创 牛客小白月赛29-I修改(最小生成树)
I-修改题意:有一个混乱的序列(可以理解为忽略具体的值,求通解),第iii种操作可以使lil_ili ~ rir_iri加减任意值,费用为wiw_iwi,求使得数列全为0的最小花费。题解:用差分数组表示这个序列,为了求通解,考虑最坏情况,即每一位都不为0每一次操作在lil_ili处+k+k+k,在ri+1r_i+1ri+1处−k-k−k最后的目标是使这个差分数组变为全0,非0的都要转移到n+1n+1n+1可以联想到最小生成树,从lil_ili向ri+1r_i+1ri+1建边,求最小
2020-11-19 20:45:21
247
原创 SSPU-ACM2020预选第一次模拟赛(A,D,F,H)
A.左右手知识点:博弈开始右手先手如果当前堆有1个石子,就只能取1个,下一堆的石子的先手就变成了左手如果当前堆有x个石子(x>1),那么可以取走x-1个,左手只能取走剩下的一个,下一堆右手仍为先手也就是说哪只手先取到第一个非1堆,哪只手就能掌控后面的局势,这只手就能必胜所以判断一下第一个非1堆的位置的奇偶性就可如果全为1,则判断n奇偶性Code:#include <bits/stdc++.h>using namespace std;int main(void) {
2020-08-09 22:13:16
272
原创 2020牛客暑期多校训练营(第四场)H.Harder Gcd Problem(数学)
H-Harder Gcd Problem题意:从1到n中,选m对数(不重复),使得每一对都不互质,求最大的m并输出一种可行的搭配题解:先线性筛筛出1到n中的素数,从大到小遍历这些素数,比如当前遍历到素数pip_{i}pi,去枚举pip_{i}pi的没用过且小于等于n的倍数(包括pip_{i}pi),如果个数为偶数,就将它们一一匹配:若为奇数,就将2倍的那个数踢出,其他的一一匹配,踢出的那个数留着和后面的素数的2倍匹配,将它们标记为已用过。其实在比赛中我无法证明这种做法的正确性(虽然现在好像也给不
2020-07-20 18:36:22
243
1
原创 2020牛客暑期多校训练营(第三场)F.Fraction Construction Problem(数学)
F-Fraction Construction Problem题意:给定a和b,构造cd−ef=ab\dfrac{c}{d}-\dfrac{e}{f}=\dfrac{a}{b}dc−fe=ba 且 d,f<bd,f<bd,f<b题解:1.当ab不互质,即ab存在非1公因数时,可以构造出a+xb−xb=ab\dfrac{a+x}{b}-\dfrac{x}{b}=\dfrac{a}{b}ba+x−bx=ba ,x任取,因为要求d,f<bd,f<bd,f<b,
2020-07-19 13:38:31
442
原创 2020牛客暑期多校训练营(第二场)G.Greater and Greater(思维+构造)
G-Greater and Greater题意:给定两个数组A和B,在A中找到一个子数组C使得Ci>=BiC_{i}>=B_{i}Ci>=Bi ∀i∈[1,m]\forall i \in[1,m]∀i∈[1,m],这样的子数组存在几个题解对A和B数组降序排列,并存下它们原本的位置id设bitset<>res,对于每一个BiB_{i}Bi,res为1的位置PjP_{j}Pj表示Aj>=BiA_{j}>=B_{i}Aj>=Bi,那么Pj−Bi.
2020-07-15 22:48:20
412
原创 2020牛客暑期多校训练营(第二场)J.Just Shuffle(逆元+模拟)
J-Just Shuffle题意:给定一个排列A和一个大质数k,找出一个置换B,使得P经过k次B置换后得到A,输出第一次置换后的结果题解:在排列A上找出所有环,记环的大小为szisz_{i}szi,每一步移动的长度为tmpitmp_{i}tmpi,使得tmpi∗k≡1modszitmp_{i}*k\equiv1 mod sz_{i}tmpi∗k≡1modszi,也就是求出k在modszimodsz_{i}modszi下的逆元,k为大质数,所以一定有解,输出每个环移动tmpitmp_{i}tmp
2020-07-15 15:55:06
379
原创 2020牛客暑期多校训练营(第二场)B.Boundary(计算几何)
B-Boundary题意:给定原点及n个点,找到一个圆使得尽可能多的点在圆上题解:三点可以确定一个圆,原点固定,遍历两个点去确定圆心,并用map保存圆心,当再次得到一个相同的圆心时,map++(圆心相同,且有共点必定为同一个圆为避免重复计算某一点,每次遍历完第一维之后,清空map,相当于每一次固定原点和定点P,遍历第三点Q,最后结果要加上P由于圆心推导的式子有点小问题,所以一直只能过95%(55555…),后面给出三点确定圆心的模板Code:#include <bits/stdc++.h&
2020-07-14 19:55:22
391
3
原创 CF1234C. Pipes(dfs+模拟)
Pipes按题意模拟就行根据当前位置、水流来的方向以及管道类型,可以通往的位置和方向是固定的dfs一步步走Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) memset(a, b, sizeof(a));#define lowbit(x) (x & -x)#define lrt .
2020-06-14 22:23:28
446
原创 CF1263D. Secret Passwords(并查集)
Secret Passwords对于每一个给出的字符串,把字符串中的所有字母之间都连上边。这样,若两个字符串有公共的字母,他们就一定在一个连通块内,最后求出连通块个数就可以了。Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) memset(a, b, sizeof(a));#define low
2020-06-14 16:05:12
299
原创 CF1223C. Save the Nature(二分+贪心)
Save the Nature二分票数,用大顶堆来存储票的价格,显然a和b的公倍数位置上应该放最大的价格,其次比较x和y,较大的那个对应的位置上放较大价格,最后把剩余的没放的位置再放剩下的价格,每次从堆中取价格,判断当前票数是否满足价格至少为kCode:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) me
2020-06-05 17:20:48
304
原创 CF1335D. Game With Array(数论+思维?)
Game With Array要使子序列和不为k和n-k,最简单的就是取k=1,判断一下s/n>=2就行,这样序列可以为n-1个2和s-2*(n-1)组成Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) memset(a, b, sizeof(a));#define lowbit(x) (
2020-06-03 23:00:41
243
原创 CF1238C. Standard Free2play(模拟)
Standard Free2play直接模拟就行:有两个挡板分别在100,50的位置,那么就可以一步步的跳到51的位置现在来到了51的位置,50有个挡板,如果49的位置有挡板,那么可以直接跳到49如果下一个挡板在45的位置,从51跳下会嗝屁,氪金大法,在50的位置开个挂,跳到50一步步的走就行了复杂度O(n)Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pai
2020-06-03 00:36:41
375
原创 1279C. Stack of Presents
Stack of Presents维护最深深度即可比如先拿一个第5层的,这时最深深度就是5,接下来如果拿第4层的就可以认为它刚刚已经被移到了最上面,如果要拿第7层的,就需要把上面的移出,然后更新深度Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) memset(a, b, sizeof(a));
2020-06-02 17:35:08
219
原创 CF346A Alice and Bob(博弈+gcd)
Alice and Bob求n个数的gcd 最后的数列必然是一个以gcd为首项,公差为gcd的等差数列比如:2 4 6 显然结束1 3 5 虽然也是等差数列,但还可以继续下去所以这题的做法就是求n的数的gcd,然后就可以求出这个数列最长为多少,减掉初始的nCode:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem
2020-05-28 23:32:54
225
原创 CF1228C Primes and Multiplication(数论)
Primes and Multiplication题意:不好描述(逃)戳上面链接吧分析:题目看起来很复杂,但是理一下其实就是 x的每个质因数在1到n的的质因数集合中出现次数 答案就是x的每个质因数的次数幂(好像很绕,我也不知道在讲什么)举个例子,x=5,n=70,x的质因数只有5,f(5,1)∗f(5,2)…f(5,70)=g(1,5)∗g(2,5)…g(70,5)f(5,1)*f(5,2)\dots f(5,70) = g(1,5)*g(2,5)\dots g(70,5)f(5,1)∗f(5,2)
2020-05-28 22:04:15
235
原创 CF467C. George and Job(前缀和+DP)
George and Job题意:给定一个数组,从中选择k个长为m的子段(不重叠),使和最大分析:f(i,j) 前i个数中选j个长为m的子段转移方程:当前i不选,继续沿用i-1的值 或者 选最后m个组成一个子序列dp[i][j]=max(dp[i−1][j],dp[i−m][j−1]+sum[i]−sum[i−m])dp[i][j]=max(dp[i-1][j],dp[i-m][j-1]+sum[i]-sum[i-m])dp[i][j]=max(dp[i−1][j],dp[i−m][j−1]+su
2020-05-27 22:21:56
300
原创 CF466C Number of Ways(前缀和,双指针)
Number of Ways题意:将一个数组分成连续的三段,有几种分法可以使三段和相等分析:因为要求和,所以肯定要前缀和(雾),遍历数组,如果当前和等于sun[n]/3,则这个位置可以为i,如果当前和等于sum[n]/3*2,则这个位置可以为j,答案加上这之前可以为i的数量(好像也不算是双指针吧)Code:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int,
2020-05-25 21:58:11
345
原创 CF707C Pythagorean Triples(数论)
Pythagorean Triples题意:给定一个数,求出另外两个数,使这三个数构成勾股数分析:a2=b2−c2,a2=(b−c)∗(b+c)a^2=b^2-c^2,a^2=(b-c)*(b+c)a2=b2−c2,a2=(b−c)∗(b+c)当a^2为奇数,令(b-c)=1,(b+c) = a^2;当a^2为偶数,令(b-c)=2,(b+c) = a^2/2;求解方程即可a<=2时,不可能构成勾股数Code:#include <bits/stdc++.h>using
2020-05-25 19:01:41
162
原创 CF486C. Palindrome Transformation(贪心)
Palindrome Transformation题意:给定一个字符串和光标的初始位置,每一步可以左右移动一位或将字符上下加1,求最小步数使之成为回文串分析:1.要使成为回文串,即对应字符相等,无论变左边的 还是变右边的 亦或是左边变一点右边变一点,总步数都是一样的,所以差别就在于移动上2.显然,全部动左边的或者全部动右边的,可以最优3.为方便,统一动左边的,如果初始位置在右边,我们可以将它移到左边的对应位置(不计步数)4.接下来算每一个对应的位置的最小步数5.加上移动的最小步数就是最后的结果
2020-05-23 23:58:11
300
原创 CF118D Caesar‘s Legions(dp)
Caesar’s Legions题意:将n1个0和n2个1排列,最多允许k1个0或k2个1连续,求排列数分析:1.显然还是线性dp(反正是dp,是不是线性不清楚)2.最开始的想法:f(i,j,k) 长度为i的排序,以j结尾,最后连续k个j,后来发现转移方程很复杂,遂放弃3.f(i,j,k,l) 选i个0,j个1,最后连续k个l,以l结尾,虽然转移方程还是有一点点复杂,但至少我能实现了(还是我太菜了)4.转移方程分为k=1和k>1两种情况:a. k=1时 以0结尾为例 dp[i][j][
2020-05-22 22:09:50
315
原创 CF706C Hard problem(dp)
Hard problem题意:给定n个字符串,每个字符串翻转需要花费一定的费用,要使所有字符串呈字典序输出(即:s1<=s2。。。。。)且花费最少分析:1.显然线性dp2.f(i,0) 为第i个不翻转,前i个达成字典序的最小费用;f(i,1) 为第1个翻转,前i个达成字典序的最小费用3.分四种情况更新dp,第i-1个字符串和第i个字符串分别翻或不翻4.注意费用较大会爆intCode:#include <bits/stdc++.h>using namespace std;
2020-05-21 22:49:43
346
原创 Codeforces Round #642 (Div. 3)
上蓝场,纪念一下A. Most Unstable Array题意:构造一个长为n,和为m的数组,使得相邻差的绝对值之和sum最大分析:当n=1时,sum只能为0当n=2时,放0和m,sum=m否则,m放任意非首尾位置,sum等于2mCode:#include <bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int, int>#define mem(a, b) mem
2020-05-15 17:51:55
166
原创 CF1283C. Friends and Gifts
Friends and Gifts题意:n个人互相送礼物,每人送出一个 收到一个,不可以送给自己,给出一个数组,表示第i个人想送给ai,ai=0表示不知道送给谁。给出一个可行方案。分析:1.用vt,vt1分别保存 不知道送给谁的序号 和 没有收到礼物的序号2.最精髓最重要的一步操作,用random_shuffle对vt1随机排序,然后cheak,如果不行就继续随机.Code:#incl...
2020-04-26 19:25:27
464
原创 Codeforces Round #634 (Div. 3)
A. Candies and Two Sisters题意:两个人分n个东西,a>b,有几种分法分析:(n-1)/2种Code:#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#inc...
2020-04-15 20:58:15
184
原创 CF1213 C. Adding Powers(进制)
题目传送题意:给定一个数组v和k,要使一个空数组a变成v,第i步可以任意在a中选一个数加上kik^iki或跳过这一步。分析:将数组v中的数字转换为k进制表示,若每一位都为1或0,说明可以由k的次方相加得到,k的每一次方只能用一次,用vis记录。Code:#include <cstdio>#include <iostream>#include <algori...
2020-04-10 17:44:50
240
原创 Codeforces Round #632 (Div. 2)
A. Little Artem题意:黑格子相邻有白格子的话B++,白格子相邻有黑格子的话,W++,构造一个矩阵,使B=W+1分析:一个角放W,其他全B即可Code:#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cm...
2020-04-09 16:11:05
195
原创 CF1217D Coloring Edges(图的遍历)
题目传送可以肯定,最多染成两种颜色当没有环的时候,只染成一种颜色有环时,返祖边染成2,其他边染成1vis[]=0,表示该点未被访问vis[]=1,表示该点已访问,但其后代未访问完vis[]=2,表示该点及其后代都已访问当vis[u]=1时,出现一条v->u的边,该边即为返祖边#include <iostream>#include <cstdio>#...
2020-04-07 00:15:24
209
原创 CF1237D Balanced Playlist(st表)
题目传送官方给的标签以及大多数题解是二分,由于蒟蒻太菜了,不知道怎么二分,用st表过了1.先分析-1的情况:最小值的两倍大于等于最大值,就可以无限循环2.如果直接暴力的话,肯定超时,我还试了一下。。。3.考虑最坏的情况,最大值在1,最小值在n,从i+1开始播放,假设中间没有满足的情况,需要循环三圈,所以数组开三倍。4.从i开始播放,假设到j停止,从i+1播放,就不可能在j之前停,所以直接...
2020-04-06 22:28:21
218
原创 CF1033C Permutation Game(博弈论+拓扑)
题目传送当无法移动时,为必败态,至少有一种方法可以到达必败态的状态为必胜态,无论怎么走都是必胜态的状态为必败态。棋子可以从数值小的格子移向数值大的格子,从当前格向可到达的格子连有向边,可形成一个有向无环图,格子中的数字就是拓扑序,按拓扑序从大到小遍历,每次遍历到距当前格长度为当前格数值倍数的格子,如果到达的格为必败态,则当前格就是必胜态,到达的所有格都是必胜态,当前格就为必败态。详见代码:...
2020-04-06 16:56:00
547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人