- 博客(43)
- 收藏
- 关注
原创 训练赛题解
总结:对于0基础的同学来说,前6题会做大部分就比较不错了,G题并不是难题,补题也需要会做,对于H、I,是针对有基础的同学出的题,0基础的同学没有学这2题的算法,可以自行学习或者暂时放弃这2题,确实比较有难度A本题签到,模拟即可#include<bits/stdc++.h>using namespace std;string s;int t;void work(){ cin>>s;int ans=0; for(int i=0;i<s.length();i++)
2021-10-07 14:51:55 593
原创 数学-nim博弈、SG函数
公平组合游戏ICG若一个游戏满足:由两名玩家交替行动;在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;不能行动的玩家判负;则称该游戏为一个公平组合游戏。NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件2和条件3。NIM游戏给定N堆物品,第i堆物品有Ai个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先
2021-03-23 21:58:50 222
原创 图论-二分图-染色、最大匹配(匈牙利算法)
染色法判断二分图染色法原理:首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况:如果未染色,那么继续染色此节点(染为另一种颜色)如果已染色但和当前节点颜色不同,则跳过该点如果已染色并且和当前节点颜色相同,返回失败(该图不是二分图)明确二分图、奇数环、染色法之间的关系:如果一个图中存在奇数环,那么这个图一定不是二分图;这一点显然成立。如果一个图中不存在奇数环,那么这个图一定是二分图:证明略模板:#include<bits/stdc++.h>
2021-03-10 19:20:12 322
原创 数论-组合数、卢卡斯定理
组合数以下求CabC_a^bCab的情况一(N2N^2N2)使用递推式Cab=Ca−1b+Ca−1b−1C_a^b=C_{a-1}^b+C_{a-1}^{b-1}Cab=Ca−1b+Ca−1b−1求解阶乘%1e9+7T=105T=10^5T=1051≤b≤a≤20001\leq b\leq a\leq 20001≤b≤a≤2000#include<bits/stdc++.h>using namespace std;int c[2010][2010];const in
2021-02-09 11:09:25 293
原创 数论-中国剩余定理、高斯消元
中国剩余定理(先挖坑)高斯消元 O(n3)O(n^3)O(n3)求解线性方程组初等行列变换把某一行乘以一个非0的数(等式俩边同时乘以一个非零数)交换某2行(方程交换位置)把某行的若干倍加到另一行上去(把一个方程的若干倍加到另一个方程上去)变换成上三角形式后完美阶梯型----------唯一解0=非0 ----------------无解0=0--------------------无穷多组解算法步骤枚举每一列c找到当前列绝对值最大的一行将该行换到最上面将该行第
2021-01-31 16:37:59 231
原创 数论-裴蜀定理、拓展欧几里得(exgcd)
裴蜀定理对于任意正整数aaa,bbb,那么一定存在非零整数xxx,yyy,使得ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)exgcd推导过程:#include<bits/stdc++.h>using namespace std;int exgcd(int a,int b,int &x,int &y){ if(!b){ x=1,y=0; return a; }
2021-01-31 15:38:44 194
原创 数论-快速幂、逆元
快速幂原理:幂的二进制分解复杂度:O(log(k))O(log(k))O(log(k))二进制为111时,∗a*a∗a每次aaa递推为a∗aa*aa∗a求aaa的kkk次方modpmod pmodp#include<bits/stdc++.h>using namespace std;#define ll long longll qmi(ll a,ll k,ll p){ ll res=1; while(k){ if(k&
2021-01-28 13:48:26 184
原创 数论-欧拉函数
欧拉函数定义:从111~nnn中与nnn互质的数的个数,a,ba,ba,b互质即gcd(a,b)=1gcd(a,b)=1gcd(a,b)=1公式:N=p1φ1∗p2φ2∗......∗pkφkN=p_1^{\varphi 1}*p_2^{\varphi 2}*......*p_k^{\varphi k}N=p1φ1∗p2φ2∗......∗pkφkφ(n)=N∗(1−1p1)∗(1−1p2)∗......∗(1−1pk)\varphi (n)=N*(1-\frac{1}{p_1})*(1-\
2021-01-27 22:39:57 118
原创 周赛代码
A使用优先队列再进行拓扑排序即可,注意多组输入,每次初始化vis,g,in数组#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int i=a;i>=n;i--)#define pb push_backusing namespace std;int n,m,in[510],vis[510];/
2020-12-06 11:54:05 129
原创 关于重复定义变量与memset函数导致超时的分析
简述先上俩组代码code1:void solve(){ int n; PII a[200010];//注意此处 cin>>n; rep(i,1,n){ cin>>a[i].fi; a[i].se=i; } sort(a+1,a+1+n); a[n+1].fi=INF; a[0].fi=INF; int k; rep(i,1,n){ if(a[i].fi
2020-11-25 18:12:30 852
原创 拓扑排序
拓扑排序很简单的一个东西,之前学由于完全没有图论基础知识没学懂是什么在图论中,拓扑排序(TopologicalSorting)(Topological Sorting)(TopologicalSorting)是一个有向无环图(DAG,DirectedAcyclicGraph)(DAG, Directed Acyclic Graph)(DAG,DirectedAcyclicGraph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点
2020-11-19 10:35:55 212 1
原创 周赛代码
D#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}int main() { int a,b; while(cin>>a>>b){ cout<<a*b/gcd(a,b)<<endl; } return 0;}E二分解法#include<bits
2020-11-08 11:52:56 141
原创 思维训练代码
A#include<bits/stdc++.h>using namespace std;#define ll long longint main(int argc, char const *argv[]) { int t; cin>>t; while(t--){ int n,a[110]; cin>>n; int maxn=0; for(int i=0;i<n;i++) {
2020-11-07 16:15:43 211
原创 Codeforces Round #681 D. Extreme Subtraction(思维)
题意:T组输入,给n个数,有俩种操作从第一个到第k个让每一个a_i-1从最后一个到第k个让每一个a_i-1题解:从后往前处理,若后一个数大于前一个数,则让后面的所有数减少到等于前一个数字,若能实现操作,则输出YES(相当于构造了一个非递减序列,一定能用有限个操作1使数组变成全0),否则输出NOcode:#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;.
2020-11-03 13:38:18 238 3
原创 Codeforces Round #681 C. The Delivery Dilemma(贪心、排序)
题意:TTT组样例,给nnn个菜,aia_iai数组表示外卖员送餐时间,bib_ibi表示自取时间,同时有多个外卖员,多个菜外卖花费时间为外卖中花费时间最多的时间,但是自己只有一个,所以选择自取花费时间为自取时间之和,每道菜可以选择自取或者外卖,求得到所有菜花费最少的时间题解:aaa数组从大到小排序,bbb数组从小到大排序,若aia_iai小于等于bib_ibi,选择外卖送,否则判断当前自取快还是外卖快,选择自取或外卖(见代码)code:#include<bits/stdc++.h.
2020-11-03 13:25:04 483 2
原创 Codeforces Round #681 B. Saving the City(贪心)
题意:T组样例,点燃一个地雷iii时相邻的地雷(i−1,i+1)(i-1,i+1)(i−1,i+1)都会爆炸,点燃一个地雷需要a个点数,放置一个地雷需要b个点数,现在需要炸掉给的s中所有的1,最小化花费的点数题解:贪心,注意边界条件code:#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)#define per(i,a,n) for (int .
2020-11-03 13:11:17 259
原创 Codeforces Round #677 (Div. 3) E. Two Round Dances
题意:N个人两等分,分别在两个序列中跳舞。N保证为偶数。跳舞过程中,因为是围在一起跳舞的,所以一个序列可以通过旋转或得到另一个序列,则认为这两个序列是相同的。问共有多少种跳舞的分配方法序列。题解:code:#include<bits/stdc++.h>using namespace std;#define ll long long int main(){ ll n; cin>>n; ll res=1; for(int i=1;i&.
2020-10-21 20:59:37 121
原创 Codeforces Round #677 (Div. 3) D. Districts Connection
题意:给出一些节点,每个节点有权值,权值相同的节点不能相连,问是否有办法使用n-1条边将所有节点连成连通图。如果可以,输出路径。不可以输出NO即可。题解:只要有不同的必定有答案只需要将所有与第一个不同的与第一个相连再将剩下的与其他任意一个相连即可比赛没做出来,人傻了code:#include<bits/stdc++.h>using namespace std;int a[5010],vis[5010];void solve(){ int n; cin>.
2020-10-21 20:53:33 285 1
原创 Codeforces Round #677 (Div. 3) C. Dominant Piranha
题意:按顺序给出一排鱼的大小,大鱼可以吃掉左或右的小鱼,吃掉后自身变大 1 .问鱼缸里是否有一条鱼经过不断的左右吞吃把其他所有鱼吃掉。(其他鱼不动)如果有 输出任意一个即可。题解:只要有不同的必定有答案比较俩数字寻找最大值即可code:#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增#defi.
2020-10-21 20:49:24 130 1
原创 Codeforces Round #677 (Div. 3) B. Yet Another Bookshelf
题意:书架上有很多书,1代表此位置有书,0没有书。每次可以抱一摞书移动一个格子。(一摞书,多少都可以,连续的1视为一摞)问最少多少次移动可以把所有的书归为一摞。题解:可以移动连续的书所以答案就是1中间0的数量双指针遍历即可code:#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增#defin.
2020-10-21 20:43:31 135
原创 Codeforces Round #677 (Div. 3) A. Boring Apartments
题意:一个人打电话,按照1 11 111 1111 2 22 222 2222 3 33 333。。。的顺序打电话一直打到9999.给一个停止的数字,问到这个数字为止,总共按了多少次按键。(包括给的数字)题解:水题,暴力即可code:#include<bits/stdc++.h>//#pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增#define .
2020-10-21 20:37:58 146
原创 Codeforces Global Round 11 B. Chess Cheater
题意:给n,k,字符串s,W代表赢,L代表输,可以将改变k个L为W,当W前有W时分数+2,没有分数+1,问得到的最大分数可以是多少题解:特判全为L的情况;找出连续的L的数量,排序,优先将小的L变为W,此时score+=2v[i]+1;剩下的只能score+=2k;最后判断一下最大值,只要score不超过最大值,直接输出,若超过,输出全为W的最值代码:#include<bits/stdc++.h>using namespace std;int main() { int t
2020-10-11 10:52:56 538
原创 Codeforces Round #674 (Div. 3) C. Increase and Copy
题意:有个数组a,开始只有一个元素a [ 0 ] = 1 ,每次操作你可以选择以下之一:1、选择数组中的一个元素+ 1 。2、复制数组中的一个元素到数组末尾。现在要让数组中的元素和为n,至少需要几次操作?题解:要使操作次数最小,则先让a[0]++,增加后复制即可,则此时需要的操作数为(a0−1)+na0(a_0-1)+\frac{n}{a_0}(a0−1)+a0n,枚举每一个a[0]即可,显然只需要枚举到n\sqrt nn即可code:#include<bits/stdc++.h.
2020-09-29 17:08:32 159
原创 Codeforces Round #674 (Div. 3) B. Symmetric Matrix
题意:T组输入,每组输入n,m,给你n种为2×2瓷砖(数量不限),让你构造m*m的矩阵,该矩阵为轴对称矩阵(沿主对角线对称,即左上到右下),问是否能够构造出这样一个矩阵题解:1.m为奇数肯定不能构造2.只要有一种瓷砖右上和左下相同,那么全部使用这一种瓷砖即可构造code:#include<bits/stdc++.h> #pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值
2020-09-29 17:00:24 110
原创 Codeforces Round #674 (Div. 3) A. Floor Number
题意:T组输入,每组输入一个n,x,n为需要到的门牌号,x为第二层以上每层有多少户,无论什么情况,第一层只有2户,求n号在第几层题解:读懂即可accode:#include<bits/stdc++.h> #pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变
2020-09-29 16:50:24 147
原创 Codeforces Round #673 (Div. 2) B. Two Arrays(思维,构造)
题意:给你一个长n的数组a,给一个T,定义f(x)为x数组中ai+aj==T(i<j)a_i+a_j==T(i<j)ai+aj==T(i<j)的数组对数,将a数组分成c,d俩个数组,在俩数组中存数字,使得f(c)+f(d)f(c)+f(d)f(c)+f(d)的值最小题解:遍历一遍数组,若T−aiT-a_iT−ai在第一个数组中已经有了,则判断第一个和第二个数组中谁的数量多,将其放入数量最少的数组中,若第一个数组中T−aiT-a_iT−ai不存在,直接将aia_iai放入第.
2020-09-28 21:10:50 218
原创 Codeforces Round #673 (Div. 2) A.Copy-paste
题意:问在保持每个数都小于等于k的情况下,最多能执行多少步a[j] += a[i] ,其中(i,j)为任意不同下标。题解:排序,将a[1]加到别的值上能加多少次code:#include<bits/stdc++.h> #pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增#define per(i,a,n) for (int i=a;i>=n;i-
2020-09-28 21:03:10 87
原创 Codeforces Round #671 D1. Sage‘s Birthday (easy version)(思维)
题意:有n个冰球排成一排,它们都有着各自的价格,现在你认为若一个冰球左右两边的冰球价格均大于此该冰球价格,那么这个冰球就是便宜的。(最左边和最右边的冰球都是不便宜的。),现在你只想购买便宜的,问你怎样排序才能购买到最多的冰球。(D1中冰球价格都不相同,D2中冰球价格可以相同。)题解:显然数量等于(n−1)/2(n-1)/2(n−1)/2问题在于如何输出序列,只需要从小到大,从左到右先填满偶数位置的数字,再填满奇数位置的数字即可#include<bits/stdc++.h> #prag.
2020-09-27 15:54:34 148
原创 Codeforces Round #671 C. Killjoy(思维)
题意:killjoy现在是个感染者,有n nn个用户他们都有着各自的评分,现在感染规则为:若有用户的评分与感染者的评分相同,则也被感染,并无法恢复。感染时间可发生在比赛中或比赛后。killjoy可以进行codeforces比赛(killjoy不能参加),可以对用户进行任意的分数操控,但所有总和必须为0。问Killjoy最少需要进行多少场比赛才能感染所有人。题解:1.若一开始所有人的rating就与killjoy相同,则不需要进行比赛,ans=12.若有任意一个或多个人rating与其相同,则一场比赛.
2020-09-27 15:49:10 119
原创 Codeforces Round #672 (Div. 2) C1. Pokémon Army (easy version)(dp)
题意:t组输入,给n个数字,构造一个序列ai−ai+1+ai+2−...ai+na_i-a_{i+1}+a_{i+2}-...a_{i+n}ai−ai+1+ai+2−...ai+n,问怎么样才能使序列值最大题解:一道dp题目,设dp1[]dp1[]dp1[]代表序列为奇数时,dp2[]dp2[]dp2[]代表序列为偶数时,那么有dp1[i]=max(dp1[i−1],dp2[i−1]+a[i])dp1[i]=max(dp1[i-1],dp2[i-1]+a[i])dp1[i]=max(dp1[.
2020-09-27 13:17:31 148
原创 Codeforces Round #672 (Div. 2) A. Cubes Sorting (思维)
题意:有一个长度为n的数组,每次能够交换相邻俩数的位置,问能否在n∗(n−1)2−1\frac{n*(n-1)}{2}-12n∗(n−1)−1次操作中使得数组非递减题解:只有当数组严格递减的时候,操作次数是n∗(n−1)2\frac{n*(n-1)}{2}2n∗(n−1),故判断数组是否严格递减即可#include<bits/stdc++.h> #pragma GCC optimize(2)#define rep(i,a,n) for (int i=a;i<=n;i++)/.
2020-09-27 13:06:15 114
原创 Codeforces Round #672 (Div. 2) B. Rock and Lever(位运算、思维)
题意:给n个数,(ai...an)(a_i...a_n)(ai...an)寻找一对(ai,aj)(a_i,a_j)(ai,aj)使得 ai与aj>=ai⊕aja_i 与 a_j>=a_i\oplus a_jai与aj>=ai⊕aj题解:进行一些运算可知,当aia_{i}ai的最高位的1与aja_jaj的最高位的1位置相同时满足条件#include<bits/stdc++.h> #pragma GCC optimize(2)#define rep(.
2020-09-27 13:01:10 160
原创 结论/特殊函数总集
记录学习过程中遇到的一些结论题或者特殊的函数全排列函数next_permutation:求下一个排列prev_permutation:求上一个排列用法类sort: int a[15]; next_permutation(a+1,a+1+n); prev_permutation(a+1,a+1+n);...
2020-03-10 17:03:48 113
原创 树状数组学习记录
树状数组学习记录树状数组真是一个好东西啊QAQ,代码短且好写。首先它的原理是半二叉树,差不多可以这么叫吧,,,比较重要的lowbitlowbitlowbit操作:int lowbit(int x){ return x&(-x);}x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。建树时 c[i]=a[i...
2020-02-28 21:59:16 622
转载 计算几何笔记整理
判断线段是否相交快速排斥实验:线段端点作矩形,若俩矩形不相交,则线段不相交跨立实验:判断一点是否在任意多边形内部:求两条直线的交点:曼哈顿距离:曼哈顿距离的性质:切比雪夫距离:曼哈顿距离与切比雪夫距离的相互转化:...
2020-01-14 15:14:00 219
原创 codeforces round #613
codeforces round #613A. Mezo Playing题目大意机器人初始位置为0,给了一串指令告诉机器人是往左走一格还是右走一格,部分指令可能会丢失,问机器人最终可能的位置的情况数。解题思路见代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>&...
2020-01-12 16:34:47 114
原创 拓扑排序
拓扑排序一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。引用自csdn神奕的博客那么如何在一个DAG中找出他的拓扑...
2020-01-12 14:20:26 191
原创 Codeforces Hello 2020 (A/B)
A-New Year and Naming题目链接题意:给俩行数量为n,m的单词,类似与天干地支的规则,依次取第一行单词与第二行单词进行匹配,接下来给出q次询问,询问匹配的第k个匹配。此处默认读者知道天干地支的知识了当时读完题很快就想到了怎么做了,假装算秒a吧题解:只需要第一行对n进行取模,第二行对m进行取模(即各行对应自己的数量取模即可)注意此处取模会得到0的结果,对应的单...
2020-01-05 16:58:47 231
原创 POJ 2253 Frogger(最短路的最小权值)
Frogger解题思路:有N块石头,1—N。每块石头都有x,y坐标,青蛙一号站在第一块石头上,青蛙二号站在第二块石头上,青蛙一号想要通过这N块石头去找青蛙二号,因为青蛙一号可以踩在任何一块石头上,所以从第一块石头到第二块石头有很多条路径,假设为X,在每一条路径中,都有跳跃范围(即在这条路径中,两块石头之间的最大距离),那么一共有X个跳跃范围,我们要求的就是这X个跳跃范围的最小值,就是the ...
2019-12-08 15:28:07 137
原创 Til the Cows Come Home-Poj2387(最短路)
Til the Cows Come Home-Poj2387题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离思路:bellman-ford求最短路模板题,此题是多组输入(卡我好久c++)//#include<bits/stdc++.h>#include <iostream>#include <vector>...
2019-12-07 11:16:03 304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人