自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Codeforces Round #810 (Div. 2) A,B,C

codefroces 810 ABC

2022-07-25 11:08:04 226 1

原创 2022牛客暑期多校第二场 G、J、K

2022牛客多校第二场

2022-07-24 22:24:43 319

原创 Educational Codeforces Round 132 (Rated for Div. 2) C

Educational Codeforces Round 132 (Rated for Div. 2)

2022-07-23 20:16:46 132 1

原创 2022牛客暑期多校第一场G、A、D、I

2022牛客多校

2022-07-19 20:09:22 764

原创 codeforces round #809 (Div. 2) A,B,C

codeforces 809

2022-07-19 13:44:07 139

原创 Codeforces Round #808 (Div. 2) A,B

codefroces 808

2022-07-18 11:38:53 150

原创 极小化极大算法实现井字棋

Minimax算法Minimax 算法又叫极小化极大算法,是一种找出失败的最大可能性中的最小值的算法。(维基百科)alpha-beta 剪枝Minimax算法中,由于每个节点都是取的极值,所以可以利用这个性质进行剪枝。以上是简介,下面通过井字棋这个游戏,按照DFS -> Minimax -> a - b剪枝这样的顺序进行引导一、需要解决的问题井字棋中,我们要做到电脑每一步棋都是下在所有他可以下的位置中对他最有利的位置。也就是Minimax算法的找出失败的最大可能性中的最小值,换

2022-01-09 13:06:16 3981 2

原创 2021牛客国庆集训派对day1 A,D,E

A Monotonic Matrix链接:https://ac.nowcoder.com/acm/contest/20322/A题意:给定一个矩阵的长和宽,求满足下列要求的矩阵数量Ai, j ∈ {0, 1, 2} for all 1 ≤ i ≤ n, 1 ≤ j ≤ m.Ai, j ≤ Ai + 1, j for all 1 ≤ i < n, 1 ≤ j ≤ m.Ai, j ≤ Ai, j + 1 for all 1 ≤ i ≤ n, 1 ≤ j < m.思路:构造几个合法的矩

2021-10-03 19:03:05 153

原创 Codeforces Round #742 (Div. 2) B,C,D,E

B. MEXor Mixup题意:给定2个数a,b,然后构造一个非负数组,使得这个数组满足1.对这个数组做Mex操作,结果为a2.对所有元素做XOR结果为b问这个数组的长度最少是多少?思路:首先从2个条件出发1.Mex(array) == a那么代表着0 ~ a - 1这些数是必须在数组里面的,个数为a2.XOR(array) == b由第一个条件知道数组中肯定有0 ~ a - 1设 x = 0 ^ 1 ^ … ^ a - 1再设数组中还需要添加的数他们的XOR值为y那么x ^

2021-09-12 13:30:00 113

原创 Deltix Round, Summer 2021 A,B,D

A. A Variety of Operations题意:一开始拥有2个0,每次可以对这2个0做如下操作1.同时加k2.一个加k,一个减k先给出a,b,问最少操作几次可以由0,0,变成a,b思路:因为是一开始数是一样的,并且每次都是加减同一个数,所以2个数奇偶性是一样的又因为奇数 - 奇数 = 偶数偶数 - 偶数 = 偶数所以最后2个数的差一定要为偶数,不然无解当a,b相等的时候操作为1次否则,可以先变成小的一个数,然后把他们的差分成2份,加减到2个上,所以操作为2次#inclu

2021-08-30 18:53:38 115

原创 Codeforces Round #740 B,C

B. Charmed by the Game题意:2个人打球,发球顺序是交替的,一开始如果是A发球,那么下一次就是B发球,第一个发球是谁,是不确定的游戏中发球者赢了,视为守住球了接球者赢了,视为break了现在给出A赢了a局,B赢了b局k的值定义为break的次数,问k的所有可能值思路:1.分析题要求出来什么题中要我们求出的是在A赢了a局和B赢了b局的基础上,所有合法比赛结果中,对于每种结果的k值2.分析题中给出的所有参数的隐藏含义题中就给出了1个条件和2个参数1,A赢了a场,B

2021-08-28 19:53:08 96

原创 Codeforces Round #741 (Div. 2) A,B,C,D1

A. The Miracle and the Sleeper题意:给定一个区间,从中找出一对(a,b),使得a % b的值 最大r ≥ a ≥ b ≥ l思路:a % b的最大值是b - 1所以a = kb + b - 1a + 1 = b(k + 1)(a + 1) / (k + 1) = b要想b尽可能大的话就要a + 1尽可能大k + 1尽可能小那么a + 1最大取到r + 1k + 1最小取到2(k 不能取0 ,取0后,a = b - 1,违反了a &g

2021-08-27 20:24:27 92

原创 2019牛客国庆集训派对day7 A,B

A 2016给定n和m,求满足下面条件的(a,b)数量1.1 <= a <= n,1 <= b <= m2.a * b 是 2016 倍数思路:a * b == k2016a * b % 2016 == 0(a % 2016 * b % 2016) % 2016 == 0所以如果a * b 是2016的倍数那么a % 2016 和 b % 2016 也是2016的倍数反之也成立那么就可以把所有大于2016的数,都统计到它%2016的余数上最后再暴力枚举一

2021-08-27 17:40:13 67

原创 dp之树形dp

树形dp:需要解决的问题,他的数据结构是树acwing 树的最长路径给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。输入格式第一行包含整数 n。接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai 和 bi 之间存在一条权值为 ci 的边。输出格式输出一个整数,表示树的最长路径的长度。思路:...

2021-08-26 17:27:05 136

原创 dp之区间dp

区间dp:当发现,解决这个问题的最后一步是关于区间的操作的时候,可以使用区间dpacwing 环形石子合并将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算:选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。输入格式第一行包含整数 n,表示共有 n 堆石子。第二行包含 n

2021-08-26 13:02:14 198

原创 dp之状态压缩

状态压缩:用一个二进制,来表示某一个状态acwing 小国王在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。输入格式共一行,包含两个整数 n 和 k。输出格式共一行,表示方案总数,若不能够放置则输出0。思路:首先要求n行放k国王假设现在设置状态f[i , j] 表示前 i 行放 j 个国王的方案数,是很难推出下一个状态的可以发现第 i 行的状态,只受第 i - 1 行影响,所以如果知道了,第i - 1行的状态,那么第 i 行的状态也就

2021-08-25 10:58:30 61

原创 dp之状态机模型

状态机:对一个状态进一步划分,从而达到能推出另一个状态acwing 1049大盗阿福阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入格式输入的第一行是一个整数 T,表示一共有 T 组数据。接下

2021-08-24 20:48:09 98

原创 有依赖的背包问题

有依赖的背包问题有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品个数和背包容量。接下来有 N

2021-08-24 17:06:05 59

原创 Codeforces Round #732 (Div. 2) A,C

A. AquaMoon and Two Arrays题意:给定2个数组a,b对a可以进行以下操作选取i,j,让ai - 1,aj + 1求最少操作次数和方案思路:把一个数变成另一个数,也就是把他们的差补掉,首先求出ab的差,然后每次让负数 +1,正数 - 1,当正负数绝对值和相等的时候才有解#include <iostream>#include <cmath>#include <vector>using namespace std;const

2021-08-24 16:16:42 62

原创 Educational Codeforces Round 111 (Rated for Div. 2)A,B

A. Find The Array题意:一个序列满足以下条件就算合法的1.ai 为12.ai不为1,那么ai - 1,和ai - 2至少存在一个现给定一个序列的和,问符合条件的序列最短长度是多少?思路:序列中一定包含1那么就可以由1进行构造想要长度最短,所以就每次+2当长了就-1#include <iostream>using namespace std;int main(){ int t; cin >> t; while(t

2021-08-24 08:35:34 72

原创 Codeforces Global Round 15 A,C,D

A. Subsequence Permutation题意:给定一个字符串,问最少从中选取几个单词,选出来的单词可以随意交换位置,最后再依次填进去,使得字符串按字典序排列思路:可以发现,字典序排列是唯一的,所以可以先求出它的字典序排列,然后依次对比,不一样的就在原序列中需要被选出#include<iostream>#include<algorithm>#include<vector>#include<string>using namespace

2021-08-21 11:41:28 68

原创 Codeforces Round #739 (Div. 3),D

D. Make a Power of Two题意:给定一个整数n,对它可以进行下面2种操作1.删除一个数字2.添加一个数字求把它变成一个2的整数次幂最少操作次数思路:首先n的范围是1e9,所以最多涉及到的,也就10多位,完全可以先把2的整数次幂预处理出来,然后统计这个数变成其中每一个数字需要的次数,取一个最小值#include <iostream>#include <string>#include <vector>#include <cmath

2021-08-20 09:58:26 46

原创 Codeforces Round #735 (Div. 2) A,B,C

A. Cherry题意:给定一个数组,找到一个区间,使得max(al,al+1,…,ar) ⋅ min(al,al+1,…,ar)最大求这个最大值思路:假设现在选择了一个区间a1,a2,a3,a4如果a1是最大值,a4是最小值那就代表着 a2 a3 都大于a4那么选择[1 , 2] ,[1, 3]这2个区间的值肯定比[1,4]大如果a4不是最小值,那么就用不到它如果选择[1,3]的话,按上面的分析最后发现有效的区间只有[1,2]所以只要找到序列中相邻元素乘积最大即可#incl

2021-08-18 19:34:38 77

原创 Educational Codeforces Round 112 (Rated for Div. 2) A,C,D

A. PizzaForces题意:给定3个数,和其对应的花费6 花费 158 花费 2010 花费 25然后给定一个n,求上面的数凑成一个 >= n的数的最小花费思路:对比上面的花费,可以发现,2的花费是5那么n为奇数花费需要 (n + 1) /2 *5n为偶数花费需要 n / 2 * 5当n < 6的时候,至少要花费15#include<iostream>using namespace std;int main(){ int t;

2021-08-18 18:49:19 65

原创 Codeforces Round #736 (Div. 2) A,C,D

A. Gregor and Cryptography题意:给定一个质数P,求满足一下条件的 a,b1.p mod a == p mod b2.2 <= a < b<= p思路:1.质数一定是奇数所以 p mod 2 = 12.p mod p - 1 = 1 ,并且 p - 1 > 2#include <iostream>using namespace std;int main(){ int t; cin >> t;

2021-08-18 17:37:20 81

原创 Codeforces Round #737 (Div. 2) A,B,C

A.Ezzat and Two Subsequences题意:给定一个序列,把这个序列分成2个不空的序列,求所有方案中,2个序列的平均值之和最大的 和 是多少?思路最大的值为1组,剩下的数为另一组#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int N = 1e5 + 10;double a[N];int main(){

2021-08-17 16:14:17 55

原创 Codeforces Round #738 (Div. 2) A,B,C,D1

A. Mocha and Math题目大意:给定n个数,对这些数可以做以下操作选取一个区间[l , r]翻转这个区间,然后再与原来的区间的数进行 & 操作,从而改变原来区间的数操作可以做无限次问,经过上面操作,这个序列的最大值最小是多少?例如:1,2选取[1,2]这个区间把区间中的数变为,1 & 2 , 2 & 1,也就是 0, 0所以最小的最大值就是0思路:1.进行 & 操作的话,原来的数一定是 >= &之后的数,也就是进行操作,

2021-08-16 16:39:15 90

原创 个人小总结

总结一下在做题的时候,发现的很好的一些方法acwing 100 增减序列给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。输入格式第一行输入正整数 n。接下来 n 行,每行输入一个整数,第 i+1 行的整数代表 ai。输出格式第一行输出最少操作次数。第二行输出最终能得到多少种结果。数据范围0<n≤105

2021-08-02 21:53:48 369

原创 DP学习总结

动态规划思想:当问题的解可以由比他规模小一点的问题的解推出来的时候(无后效性),就可以考虑能不能用动态规划诈一看,就不就是递归的思想没错!它就是的动态规划就是基于递归,在递归的基础上进行优化首先看递归哪里需要优化例如斐波那契数列递推式fun(x) == fun(x-1) + fun(x-2)递归结束条件if( x为1或者2的时候) return 1当递归计算f(5)和f(6) 的时候,f(4)会被计算2次所以存在重复计算 (画重点)dp就是优化了递归的重复计算,让它不用重复计

2021-07-22 16:54:01 158

原创 codefroces 1541B 1519D

1541B题目大意:给定N(2<=N<=1e5) 个不同的数,找到其中满足1,i<j2,ai*aj==i+j这2个条件的数量有多组输入1<=t<=1e4数据范围很大,所以不能暴力求解主要条件是ai*aj==i+j所以得知i+j是ai的倍数i是确定的所以可以枚举ai的倍数假设是ai的倍数是XX要满足X>2i这个条件,所以就是枚举ai大于2i的倍数就可以得到j==X-i当找到第一个大于i的倍数了之后,可以求得j之后 j就可以j+=a[i],

2021-06-28 21:42:05 183

原创 计数dp,数位dp,状压dp,树形dp,记忆化搜索

dp个人感觉其实就是找一个递推式的过程,也就是状态转移方程。然后再利用前面已经求出来的状态,得到某个状态的解难点也就在于设定状态和求出转移方程计数dp顾名思义就是状态对应的值是一个东西的数量acwing 900 数的划分题目大意:给定一个整数N(1<N<=1000),划分成若干个正整数的和,求方案数并且:假设N=41 1 22 1 11 2 1是算一种方案完全背包方法求解:可以把这个题转化成完全背包给定的数N,就是背包的容量,然后有N个物品价值和重量分别是1 1

2021-06-28 16:25:35 374

原创 Codeforces Round #726 (Div. 2) E1,E2

E1题目大意:给定一个长度为N(1<=N<=5000)的字符串S,以及一个数K(1<=K<=5000)可以对S做以下2种操作:1.去掉S的最后一个字符2.把S变成S+=S这2种操作可以进行无数次,要求把他变成长度为K的字符串,并且要求这个字符串是所有满足条件中的按字典序排序后,最小的输出这个字符串思路:对S的操作只有去掉最后一个,然后自加,所以最后变为K长度的字符串是可以暴力求出来的,首先是不去字符,自加,然后就是去一个,二个,三个 等等,然后进行自加。所以最后不同的

2021-06-25 13:11:20 69

原创 poj 3280

poj 3280题目大意:给定一个长度为M(1<=M<=2000)字符串S,这个这字符串可以做下面2个操作:1.添加一个单词2.删除一个单词然后会给定N(1<=N<=26)个单词的添加代价和删除代价求把这个字符串变成回文字符串的最小代价区间dp:设置状态;f[i,j]表示 i 到 j 这个区间变成回文字符的最小代价状态计算:f[i,j]要变成回文字符串的话,有2种情况:1.s[i]==s[j] ,这时候f[i,j]=f[i+1,j-1]2.s[i]!=s[j

2021-06-24 18:34:03 120

原创 线性dp,区间dp

最长上升子序列设置f[i],表示以第i个数结尾的上升子序列的最大长度第i个数可以接到在它之前比他小的所有数后面所以f[i],就是前面计算出来的所有比它小的数的f[j]+1的最大值所以f[i]=max(f[i],f[j]+1);复杂度O(n^2)#include<iostream>using namespace std;const int N=1000;int a[N],f[N];int main(){ int n; cin>>n; fo

2021-06-23 20:57:29 66

原创 Codeforces Round #726 (Div. 2) Deleting Divisors

题目大意:给定一个数,2个人分别开始选取当前这个数的一个因子,然后减去它,因子规定不能取1和这个数本身,当一个人没有因子可以取的时候,就输了。由题意知当这个数变成了质数的时候,或者1的时候,就代表现在要取的这个人输了然后知道奇数可能是质数,但是偶数一定不是质数所以现在考虑必胜态,是不是可以让我要拿的时候都是偶数,他要拿的时候都是奇数,这样直到这个奇数是质数的时候,他就输了。首先假设一开始给的n为偶数那么考虑能不能有一种方案变成奇数n为偶数的时候有2种情况1.因子里面只有偶数2.因子里面有偶数

2021-06-22 14:39:35 96

原创 uva 11292 11729 11300

uva 11292贪心题意是找到n个骑士去砍掉龙的n个头并且花费是最少的,一个骑士只可以砍掉一个头既然一个骑士只可以砍掉一个头,那么就尽可能,让骑士去砍一个最接近他花费的头,就可以花费最少也就是避免出现花费大的骑士去砍小头#include<iostream>#include<algorithm>#include<queue>#include<set>using namespace std;int main(){ int n,m;

2021-06-18 17:38:03 80

原创 紫书The SetStack Computer,uva

uva12096用于对于集合的操作algorithm库set_union合并2个集合,求并集set_intersection求2个集合的交集都可以使用于任何类型//对于set#include<iostream>#include<set>#include<algorithm>#include<vector>using namespace std;int main(){ set<int> a,b,c; for(

2021-06-06 10:57:15 4561

原创 2021/4/10递归和递推的学习

递推:指从题目的条件中,找到了数据之间某种递推的关系,可以反复的运用这个关系来得到我们想要的中间答案和最后的答案。有顺推,和逆推。一般题目会给出一个初始条件和问题。顺推:从初始条件推到问题结果逆推:从问题出发推到已知条件递推算法,主要问题是找到那个递推式子,一般是相邻数据之间的某种关系,把一个大问题,分解成很多相同逻辑求解的小问题,由小问题推出大问题。递归:递归,就和他的字面意思一样,递和归。递归不同于递推的就是,到最后的时候要进行归,用于把一个大问题分解成一个小问题解决,把这个小问题再分

2021-04-10 19:02:41 121

原创 P3392 涂国旗

https://www.luogu.com.cn/problem/P3392这个题归在了枚举里,这个题思路就是枚举三个局域的2个分界线,然后计算出每种情况的值,再求最小值#include<iostream>using namespace std;int sum=99999999,n,m;int num;char map[100][100];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int

2021-04-08 20:47:43 135

原创 next_permutation,prev_permutation

next_permutation把一个序列变成它的下一次排列prev_permutation把一个序列变成它的上一次排列用这2个函数的时候需要包含algorithm文件主要用于全排的问题例题https://www.luogu.com.cn/problem/P1088这个题就是要求某一个排列后的第n个排列,故用这2个很容易做出来#include<iostream>a#include<algorithm>using namespace std;int n,m;int

2021-04-08 20:42:11 55

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除