![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ACM基础算法
二进制枚举,贪心,矩阵快速幂......
_昨日不可追
这个作者很懒,什么都没留下…
展开
-
P1655 小朋友的球(第二类斯特灵数&高精度)
第二类斯特灵数递推式:用f[i,j]表示将前i个球放入j个盒子中将前i-1个球放入j个盒子里,再把第i个球任意放入一个盒子里将前i-1个球放入j-1个盒子里,再把第i个球单独放入一个盒子里f[i,j]=f[i-1,j-1]+j*f[i-1,j]题意:由于数据较大,需要用高精来计算#include <iostream>#include <bits/stdc++.h&...原创 2020-01-03 18:38:47 · 168 阅读 · 0 评论 -
高精度
转载原地址转载 2019-10-22 20:32:17 · 224 阅读 · 0 评论 -
CodeForces - 1305 D - Kuroni and the Celebration(交互题,思维)
传送门题意:n个点,n-1条边,通过每次向系统询问两个点,它会告诉这两个点的lca最多询问⌊n2⌋\lfloor \frac{n}{2}\rfloor⌊2n⌋次找到根结点并输出思路:考虑一颗树的两个叶子结点,如果他们的lca是其中的一个叶子结点,那么lca一定是根结点,如果他们的lca不是这两个叶子结点,那么这两个点肯定都不可能是根结点。具体做法:就是把每次向系统询问两个叶子结点,...原创 2020-03-04 15:01:28 · 271 阅读 · 0 评论 -
Codeforces Round #628 (Div. 2) D. Ehab the Xorcist(异或构造,思维)
传送门题意:给两个整数u,v,构造一个数组,使得数组的异或和等于u,数组的和等于v要求构造的数组尽可能的短思路:对于每种情况讨论输出即可,注意几种情况的特判看代码应该能明白代码:#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>...原创 2020-03-15 12:15:35 · 1275 阅读 · 0 评论 -
I:建通道 (思维,位运算)
2020牛客寒假算法基础集训营2传送门题意:分析:如果两个数相等那么他们的异或值为0,所以直接把他们连起来即可考虑所有不同的数(cnt个):因为花费的值为 x 二进制最低位 1 对应的值,那么在越低的位把他们异或得到1,花费越小,那么所有的数中只要在第k位,既有0又有1,那么就把是0的和是1的相连,把是1的和是0的相连,需要花费(1<<k)*(cnt-1)我们使k(0&...原创 2020-02-07 15:53:40 · 462 阅读 · 0 评论 -
G:判正误(快速幂,取模,随缘过题)
传送门题意:分析:emmmm,这个题,随缘ac就是快速幂,然后多取几个模数即可,比赛是的数据直接取1e9+9应该可以过,数据应该加强了吧代码:#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <vecto...原创 2020-02-06 22:08:04 · 187 阅读 · 0 评论 -
Codeforces 1263D. Secret Passwords(并查集,思维)
传送门题意:给n个字符串,如果任意两个字符串有一个字符相同,则他们相同即属于同一集合,问总共有几个集合思路:并查集,对于每个字符串,把每个字符与第一个字符合并,因为他们肯定在同一个集合(意思是每个字符串都当成ch[0],看有几个不同的),合并之后,for(1-26)以它为根的个数,即集合的个数,貌似是思维题(并查集裸题)代码:#include <iostream>#inc...原创 2019-12-03 22:04:48 · 257 阅读 · 0 评论 -
AtCoder Beginner Contest 125 C - GCD on Blackboard
一种思路两个循环分别储存左右abc 125#include <iostream>#include<algorithm>#include <stdio.h>#include <string>#include <map>//#include <bits/stdc++.h>using namespace std;/...原创 2019-04-30 16:19:21 · 160 阅读 · 0 评论 -
AtCoder Beginner Contest 158 D - String Formation(思维)
传送门题意:给一个字符串,然后有q次操作Ti==1T_i==1Ti==1就是把字符串翻转Ti==2T_i==2Ti==2Fi==1F_i==1Fi==1把cic_ici加到字符最前面Fi==2F_i==2Fi==2把cic_ici加到字符最后面输出最终的字符串思路:直接一步一步操作肯定会超时那就考虑如何直接得到结果对与每次插入字符来说,它在的位置,看他后面要翻转...原创 2020-03-07 23:42:58 · 448 阅读 · 0 评论 -
AtCoder Beginner Contest 158【A B C D E】
传送门A - Station and Bus三个字符,A,B两个都出现输出Yes,否则输出No#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>#include <math.h>...原创 2020-03-07 23:32:25 · 356 阅读 · 0 评论 -
AtCoder Beginner Contest 131C
以前做过类似的找一段区间内[a,b],c的倍数的个数有几个,但每次的做法都很乱,虽然做出来了,但太麻烦,刚才突然见别人这样写,真的大佬做法C题题意就给区间[a,b],有多少个数满足,既不是c的倍数,也不是d的倍数当时做法#include <iostream>#include<algorithm>#include <stdio.h>#include ...原创 2019-06-23 15:32:09 · 126 阅读 · 0 评论 -
AtCoder Beginner Contest 158 E - Divisible Substring(多少个非空子串是p的倍数)
传送门题意:给一个字符串(由数字‘0’~‘9’组成),一个素数p,问有多少个非空子串是p的倍数思路:x记录到当前mod p的值,如果前面有几个值等与x,就加上,因为任意两个他们之间的字符串mod p==0p=2||p=5,只要该为mod p==0,则以该为结束的字符串都是p的倍数代码:#include <iostream>#include <stdio.h>...原创 2020-03-12 16:43:07 · 391 阅读 · 0 评论 -
牛客等级之题N2(8.13场)A 斐波那契(矩阵快速幂)
传送门题意:思路:斐波那契数列fi=fi−1+fi−2f_i=f_{i-1}+f_{i-2}fi=fi−1+fi−2f12+f22+f32+...+fi−22+fi−12+fi2=fi∗fi+1{f_1}^2+{f_2}^2+{f_3}^2+...+{f_{i-2}}^2+{f_{i-1}}^2+{f_i}^2=f_i*f_{i+1}f12+f22+f32+...+fi−22+fi−12+fi2=fi∗fi+1用矩阵快速幂求斐波那契的第n项和第n+1项即可代码:con原创 2020-08-13 22:19:42 · 164 阅读 · 0 评论 -
矩阵快速幂
N=2;//矩阵大小ll quick(ll a,ll b){//快速幂 ll ans=1; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod; b/=2; } return ans%mod;}struct sa{ ll m[N][N];};sa Mul(...原创 2020-03-06 20:58:59 · 140 阅读 · 0 评论 -
J:u's的影响力(矩阵快速幂)
传送门题意:思路:写几项,推导x,y,a^b的系数即可,然后找好和项数对应的关系x,y都是斐波那契的某一项,然后正常看的话,a^b的系数应该是前两项之和加1,仔细观察发现,它的系数也是斐波那契的某一项减1即可用矩阵快速幂算系数,因为数据大,然后还有就是用欧拉降幂1e9+7是素数,它的欧拉函数值是1e9+6我的推导过程代码:#include <iostream>#...原创 2020-02-05 16:35:23 · 218 阅读 · 0 评论 -
Fast Matrix Calculation(hdu 4965 矩阵快速幂)
Fast Matrix CalculationProblem DescriptionOne day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learning something about matrix, so he decided to make a crazy...原创 2019-07-19 09:19:00 · 134 阅读 · 0 评论 -
Codeforce 1311D - Three Integers(暴力枚举)
传送门题意:给三个整数a,b,ca,b,ca,b,c可以对每个数进行+1+1+1或者−1-1−1任意次使得三个数满足,bbb能被aaa整除,ccc能被bbb整除求变化成这种关系的最小次数,并输出a,b,ca,b,ca,b,c思路:数据只有1e4,直接暴力枚举即可从1到1e4枚举a然后枚举a的倍数b然后枚举b的倍数cT∗n∗log(n)∗log(n)T*n*log(n)*log...原创 2020-02-27 16:18:49 · 221 阅读 · 0 评论 -
D:数三角 (暴力枚举,判断钝角三角形)
传送门题意:n个点,问任意选三个点组成的三角形,有多少个是钝角三角形分析:n<=500,数据小,直接暴力枚举即可判断是钝角三角形的条件设三角形三边为a,b,c,c为最长边,如果a^2 +b^2< c^2,则为钝角三角形代码:#include <iostream>#include <stdio.h>#include <algorithm&...原创 2020-02-06 21:32:40 · 450 阅读 · 0 评论 -
Codeforces 1263B. PIN Codes(暴力)
传送门题意:t组数据,每组n个四位数,目的是改变最小的次数,使得n个数各不相同思路:看这个数据:2<=n<=10,因此发现重复的,暴力改变千位的值,如果改变后的数,没出现过,则break,一个十个数,for(0-9)改变千位,肯定能找的代码:#include <iostream>#include <stdio.h>#include <alg...原创 2019-11-30 21:08:55 · 293 阅读 · 0 评论 -
棋盘问题 POJ - 1321
题目链接在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <=...原创 2019-07-21 22:20:52 · 128 阅读 · 0 评论 -
[NOI2015]程序自动分析(luogu p1955并查集&离散化)
题目传送门题目描述在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设x1,x2,x3…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x4≠x1,这些约束条件显...原创 2019-08-02 12:03:20 · 127 阅读 · 0 评论 -
P1966 火柴排队(树状数组&离散化)
https://www.luogu.org/problem/P1966分析问题:要求min{∑(ai2+bi2-2aibi)}=min{∑ai2+∑bi2-∑2aibi},我们需要使ai*bi的值最大即可关键1:排序不等式的定义就是对于这样两个有序数列,它们的 逆序乘积和<=乱序乘积和<=顺序乘积和关键2:参考洛谷大佬题解这样问题就与求逆序对很相似了;进行离散化即可,然后问题...原创 2019-07-28 15:07:51 · 199 阅读 · 0 评论 -
Codeforces 1359 C. Mixing Water(二分)
题意:一杯热水,一杯凉水,一杯热水,一杯凉水,一杯热水…这样往杯子里加,找到最接近给定温度T,输出最小的加水次数可以发现,加偶数次,即热水杯水等于凉水,它的温度是不变的始终是(h+c)/2加奇数次,即热水杯水等于凉水+1,它的温度随着杯数增加是递减的二分找到奇数杯的最接近温度T的,二分结果可能有误差,在上下摆动算一下最小的就行了typedef long long ll;using namespace std;const int MAXN=1e5+50;const int inf=0x3原创 2020-05-29 16:43:38 · 224 阅读 · 0 评论 -
Codeforces Round #627 (Div. 3) D. Pair of Topics(二分,思维)
传送门题意:The pair of topics ???? and ???? (????<????) is called good if ????????+????????>????????+???????? (i.e. it is more interesting for the teacher).找满足这个不等式的对数思路:移项得 ????????-????????>????????-????????我们把ai−bia_i-b_iai−bi放到数组中排序,每次只用找到,原创 2020-03-13 09:48:45 · 2443 阅读 · 0 评论 -
Codeforces 1295C Obtain The String (二分)
传送门题意:给两个字符串s,ts,ts,tzzz为一个空串问对sss进行多少操作能将zzz变成ttt每次操作为,选s的一些字串(可以不连续,但顺序不能乱),让把这个字串加到Z的后面输出最少操作的次数,如果zzz不能变成ttt,输出-1思路:把字符串放入vector,或者二维数组里,因为只有小写字母,30个空间已足够如果t的字符在s中找不到,那肯定输出-1如果能找到为了使操作数最...原创 2020-01-30 14:24:53 · 3293 阅读 · 0 评论 -
Can you solve this equation?(hdu 2199 二分)
传送门Problem DescriptionNow,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solution between 0 and 100;Now please try your lucky.InputThe first line of the input contains an in...原创 2019-11-25 20:43:12 · 98 阅读 · 0 评论 -
Alice‘s Print Service(二分,思维)
传送门Problem DescriptionAlice is providing print service, while the pricing doesn’t seem to be reasonable, so people using her print service found some tricks to save money.For example, the price whe...原创 2019-09-26 21:19:12 · 220 阅读 · 0 评论 -
lower_bound( )和upper_bound( )的用法
添加链接描述转载 2019-06-03 11:56:00 · 329 阅读 · 0 评论 -
Codeforces 1395 B. Boboniu Plays Chess(构造)
传送门题意:一个点可以在同一行或者同一列任意移动给定初始位置,找到一种路径可以遍历所有的点一次思路:因为给的初始点不在边界上,所以直接先把他移动到最上面,然后移动到最左面,然后蛇形遍历一下就好(已经遍历过的跳过去)代码:struct sa{ int x,y;}p[MAXN];map<int,map<int,int> >mp;int main(){ std::ios::sync_with_stdio(false),cin.tie(0),cout.t原创 2020-08-13 10:10:37 · 282 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) D. Walk on Matrix(构造)
传送门题意:给一个数k,构造一个矩阵用上面那个代码跑出来的值dp[n][m],和找到一个走法,走到(n,m)路径上的值相与的最大值ans,他们的差值是k思路:构造一个2*3的就可以了跑出来的dp[n][m]是0,然后从(1,1)(1,2)(2,2)(2,3)这样的相与值是k代码:int main(){ std::ios::sync_with_stdio(false),c...原创 2020-04-01 01:32:55 · 198 阅读 · 0 评论 -
Educational Codeforces Round 83 (Rated for Div. 2) C. Adding Powers
传送门题意:思路:每步可加kik^iki,也可以跳过不加,看能否构成给定数组数组中的0是不需要处理的我们直接一步一步把数分解即可,看要用到的i是否够用,每个i只能用一次做的过程:假设k=9,有一个数是b[i]=93+94+959^3+9^4+9^593+94+95int l=0;//要用的幂次 while(1){ while(b[i]%k==0){ b[...原创 2020-03-10 10:10:54 · 2703 阅读 · 0 评论 -
Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(模拟)
传送门题意:给一个长度为n的字符串对于字符串中的每个字符,如果它比左边或者右边的大一,那么它就可以被删除问最多能删除多少思路:要想删除的更多,每次删字典序最大的,因为只有小的可以删除大的,小的先保留以便多次利用代码:我的代码有点复杂,每次就找出可以删的最大的那一个然后删除#include <iostream>#include <stdio.h>#inc...原创 2020-03-02 17:14:17 · 121 阅读 · 0 评论 -
C. Array Splitting(cf 1197C)
http://codeforces.com/contest/1197/problem/C题意:有一个递增的数列,把它分成k段,找到这样的分段方法,即每段最大值减最小值的和最小分析:分成k段,即要加k-1个隔断,这k-1个隔断,能隔开差值最大的几个,那最后得到分隔后的各段最大最小差值***和最小***#include <iostream>#include<algorithm...原创 2019-07-26 11:30:23 · 231 阅读 · 0 评论 -
Codeforces 1398 C. Good Subarrays(前缀和&&思维)
传送门题意:找区间的和等于区间长度的个数如果把数组的每个数都减1,那找的就是区间和为0的个数思路:求个前缀和,记录一下每个数出现的次数,每次加上该数在前面出现的次数即可(前面每出现一次,就会有一段区间和为0)代码:int t,n;int a[MAXN];ll sum[MAXN];map<ll,ll>p;int main(){ std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); char x;原创 2020-08-15 13:31:08 · 1632 阅读 · 0 评论 -
Codeforces Round #633 (Div. 2) C. Powered Addition(贪心)
传送门题意:一个数组,第T秒可以给数组中的任意一个元素加quick(2,T-1)问最少多少秒可以把该数组变成非递减序列思路:直接找与前面差值最大的是多少即可,看他需要几秒,他可以了其他的也就可以了代码:#include <iostream>#include <stdio.h>#include <algorithm>#include <...原创 2020-04-13 09:54:44 · 240 阅读 · 0 评论 -
牛客练习赛61 B.吃水果(贪心)
传送门题意:思路:假设n是较小的如果n乘以2还小于m,那让n一直乘2直到乘2可以大于m(这样之后一定会有解且保证最小,因为如果还继续往上乘结果肯定会变大)然后如果m是奇数的话,先让他们同时减1,因为最后要让m是n的2倍然后两个数每次减2直到m是n的2倍break即可代码:#include <iostream>#include <stdio.h>#inc...原创 2020-04-11 14:02:41 · 130 阅读 · 0 评论 -
#10001. 「一本通 1.1 例 2」种树(贪心)
传送门题意:思路:为了使种树的数量最小,尽量让一颗树,满足多个区间,同时满足的树,一定尽可能在区间的右侧种按右边界从小到大排序之后,我们发现,种的树越在右边,下一个区间利用的可能越大,先判断区间是否满足,当一个区间不满足时,我们就从该区间的右边界种树,直到满足即可,然后进行下一个区间代码:#include <iostream>#include <stdio.h&g...原创 2020-03-01 17:45:25 · 240 阅读 · 0 评论 -
#10000. 「一本通 1.1 例 1」活动安排(贪心)
传送门题意:41 34 62 51 721<=n<=1000思路:为了能有更多的活动,对于每一个活动越早结束,其他活动越可能发生。按照活动结束时间排序即可代码:#include <iostream>#include <stdio.h>#include <algorithm>#include <string...原创 2020-03-01 15:07:34 · 242 阅读 · 0 评论 -
F:拿物品 (贪心)
传送门题意:分析:就是贪心,不太好解释看一下出题人题解总归意思就是对于每个人,既想自己取大的,又要想着让对方取不到大的,就是自己取到大的,尽量也能把对方的大的取找就是把a+b排序,轮流输出位置即可代码:#include <iostream>#include <stdio.h>#include <algorithm>#include <...原创 2020-02-06 22:00:25 · 168 阅读 · 0 评论 -
Codeforces 1296D Fight with Monsters(贪心)
传送门题意:n个怪兽,每个怪兽有一个血量,然后你和另一个人轮流打怪兽,你和另一个的攻击力分别为 a,b如果怪兽在你打的时候死了,得一分,其他的不得分现在你有k次机会,可以让另一个人跳过他的回合问最多能得多少分思路:贪心,正常能让自己的回合下杀死的,不用消耗k如果不能,那就只能让另一个人跳过他的回合,为了能得更多分,尽可能把两个人轮流攻击之后,剩余血量少的时候让对手跳过他的回合,以便...原创 2020-02-05 22:39:58 · 241 阅读 · 0 评论