自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [博弈论]取石子(困难)

https://www.acwing.com/problem/content/1323/思路:感觉一定要很聪明脑洞大开的那种才能想出来记忆化搜索先考虑一种相对简单的情况。假设题目给出的所有堆的个数都大于1。设 总操作数 b = 堆数 + 石子总数 - 1,想到 b 为 奇数的时候 先手必胜。简单情况时,始终保证所有堆的个数大于1,若某堆的石子个数=1了,则将这堆和别的堆合并,给到对面选手的状态,还时保持了所有堆的个数大于1.设石子个数为1的堆有a个定义 f ( a , b )① 后继状

2021-06-22 23:18:21 175 1

原创 [博弈论]移棋子游戏

https://www.acwing.com/problem/content/1321/思路:求所有棋子的sg异或之和,记忆化搜索得到当前结点后继的这些点的sg值之和,放到set里面(哈希表也可以)然后找到最小的不属于集合的自然数就是当前结点的sg值#include<bits/stdc++.h>using namespace std;const int N = 2010,M = 6010;int n,m,k;int f[N];int h[N],ne[M],e[M],id

2021-06-22 16:25:55 373

原创 [博弈论]洛谷P1290

https://www.luogu.com.cn/problem/P1290题意:给定两个正整数M和N,从其中较大的一个数减去较小的数的正整数倍,先得到0的人获胜思路:类Nim游戏,根据判定引理推。但这是先得到0的人获胜,所以先要找必败局面终局。当前局面,两个数有一个数是0,那就是必败局面,因为这就对应着,上一个人已经取到0了。假设某个局面(a,b)是必胜局面,a>b,那它的前驱局面(a+b,a)则是必败局面,因为只能指向必胜局面。而所有(2a+b,a),(3a+b,a)都是必胜局面,

2021-06-22 09:54:40 189

原创 牛客小白月赛34

https://ac.nowcoder.com/acm/contest/11211#questiona题思路:两种方法① 找最长上升子序列,那剩下的那些就是要修改的,O(nlogn)② f[ i ][ j ] 代表 修改到第i位,最后一位<=j的最小代价。转移方程:f[ i ][ j ] = min(f[ i ][ j-1 ],f[ i - 1][ j ] + (a[i] != (j - 1 + ‘A’))); O(26 * n)int t,n,m;char s[N],a[N];

2021-06-20 10:38:58 122

原创 分解质因数/细节/二分CF Round #725 (Div. 3)DEG

Codeforces Round #725 (Div. 3)DEGhttps://codeforces.com/contest/1538D题题意:给定a,b,k,要求经过正好k次操作后,a == b。一次操作可以对a 整除 c 或 对 b 整除 c (c 要 大于 1)解析:分解质因数,先算a有几个因子,b有几个因子,如果k>cnta+cntb,肯定不符合如果k > 1 的话,都是可以凑的如果k == 1 的话, a是b的倍数,或者b 是 a的倍数才行,相等不行。细节!!!

2021-06-13 23:48:56 124

原创 AtCoderBeginnerContest134DEF

AtCoderBeginnerContest134DEFhttps://atcoder.jp/contests/abc134D题题意:n个盒子,第i个盒子上标注了数字i对于每一个盒子,可以选择放1个球或者不放一个操作序列(每个盒子放或不放)别称为good,当满足下面条件:对于所有属于1 - n 的 i 盒子 ,编号是它的倍数的盒子里放的球的总和 % 2 等于a[i]思路:看别人的思路有点没看懂,先埋个坑待填。实际上题目都不一定翻对了。。E题题意:求最长上升子序列个数思路:nl

2021-06-01 23:31:19 199

原创 AtCoderBeginnerContest133 E

AtCoderBeginnerContest133Ehttps://atcoder.jp/contests/abc133/tasksE题题意:一棵n个节点的树,有k种颜色,距离<=2的树不能用同一种颜色,问方案数量思路:根结点在第一层有k个选择,第二层的点,不能和父节点相同,第二层第一个点k-1个选择,第二点有k-2个选择,(k-1) * (k-2) * (k - 3)…第三层及之后的每层,某个结点它不能和它的父节点一样,它也不能和它的爷爷结点一样,同时它不能和它的兄弟一样(通过

2021-05-31 23:24:11 109

原创 AtCoderBeginnerContest132 DEF

AtCoderBeginnerContest132 DEFhttps://atcoder.jp/contests/abc132D题 排列组合题意:给定n,k,代表n个球中有k个蓝球,n-k个红球将这n个球排成一列,每次可以将连续的一段蓝球取走,直到所有的蓝球全部被取走输出k个数其中i(1<=i<=k)表示取 i 次才能取走所有的蓝球的摆放球的方案数思路:好久没写排列组合,不管是求法还是写法都有些忘了,温故而知新啊定义m代表篮球个数,t代表红球个数,假设要取 i 次,t个红球代

2021-05-30 23:49:43 153

原创 AtCoderBeginnerContest131DE

AtCoderBeginnerContest131DEhttps://atcoder.jp/contests/abc131D题 贪心题意:n个工作,完成工作i要花费ai的时间,要求在时间bi之间完成工作i。同一时间不能做两项工作,问能否将这些工作都完成。思路:先按bi从小到大排序,越急越先,然后同等重要,时间花的少的先。E题 图,菊花图题意:n个点,要求构造一个简单图,使得其中恰好有k个点对(u,v)要求(u<v)的距离恰等于2。思路:通过菊花图,能构造最多的点对,有(n-1

2021-05-29 23:34:11 124

原创 AtCoderBeginnerContest130 EF

AtCoderBeginnerContest130 EFhttps://atcoder.jp/contests/abc130E题 dp题意:求数组s和数组t的公共子序列个数思路:f [ i ] [ j ] s中选到了第i个,t中选到了第j个且一定选第j个的方案数转移方程:如果s[i] ! = t[ j ] 则 f [ i ][ j ] = f [ i - 1] [ j ]如果s[i] == t[ j ]则 f [ i ] [ j ] = sum(f[i-1][1],f[i-1][2]…,

2021-05-28 17:44:22 161

原创 AtCoderBeginnerContest129 DE

AtCoderBeginnerContest129 DEFhttps://atcoder.jp/contests/abc129D题题意:n*m的矩阵,存在 . 和 # 两种,#代表障碍,.代表通的。要找个.放灯,灯可以往上下左右照,遇到障碍物就会被挡住。求找个地方放灯以达到照射的最大格数。思路:dp,f[i][j][k] (k的范围是0,1,2,3)代表 到从第k个方向上到 ( i , j ) 有 f[i][j][k]个格子是通的0代表左,1代表上,2代表右,3代表下if(s[i]

2021-05-27 23:04:02 190

原创 AtCoderBeginnerContest128 DEF

AtCoder Beginner Contest 128 DEFhttps://atcoder.jp/contests/abc128D题题意:v数组长度是n,代表有n个珠宝,可以进行k次操作;每次操作,可以选择1 从左边拿一个到手里2 或者从右边拿一个手里3 或者从手里放回一个到左边4 或者从手里放回一个到右边问最后手里所拥有珠宝价值总和最大思路:还以为是什么复杂的dp,但其实暴力就可以。按照贡献来想两重暴力循环,从左边拿几个,从右边拿几个,如果k次操作有剩,则将手里小于0的

2021-05-26 22:14:08 218

原创 AtCoderBeginnerContest127 EF题

AtCoder Beginner Contest 127 EFhttps://atcoder.jp/contests/abc127F题:题意:有函数f(x)初始为0,有两个操作,1是给f(x)加上|x−a|+b,2是询问函数的最小值及x思路:查询的时候,b累加就好了,前面就是多个绝对值的函数这样|x - a1| + |x - a2| + |x - a3|这样 ,想到就是数轴上x到点的距离,就比较清晰了。就是对顶堆有点忘了稍微复习了下。 int t,n,m;priority_queue&

2021-05-25 22:05:41 139

原创 AtCoder Beginner Contest 126 DEF

AtCoder Beginner Contest 126 DEFhttps://atcoder.jp/contests/abc126D题题意:对1棵有n个结点的树01染色,要求任何有相同距离的顶点之间的距离为偶数输入:n个点,n-1条边思路:链式前向星建树,从1个点出发找每个点到它的距离,距离为偶数的都涂0,距离为奇数的都涂1 (没开longlong wa了几发)void dfs(int u,int c){ res[u] = c; vis[u] = true; f

2021-05-24 21:33:23 160

原创 AtCoder Beginner Contest 202 D题

AtCoder Beginner Contest 202 D题https://atcoder.jp/contests/abc202/tasks/abc202_d题意:给定A,B,K要求生成一个由A个’a’,B个’b’组成的字典序排在第k个的字符串思路:dp如何确定答案第一位为’a’还是’b’? 有大于等于k个字符串第一位为a,则a,否则为b定义 f [ i ] [ j ] 代表 由 i个a 和 j 个b 组成的字符串的个数f [ i ] [ j ] = f [ i - 1 ] [ j ]

2021-05-23 23:41:10 219 1

原创 Divide by Zero 2021 and Codeforces Round #714 (Div. 2) BCD题

位运算/构造 B题题意:给定一个长度为n(n>=2)的数组a,你可以将a进行不同的排序,要求排序后结果满足 : (1 <= i <= n-1)比如数组长度为5,则要满足每次问能满足条件的排序方式有多少种。(种数太多要对1e9+7取模)解析:如果满足数组中最小的数>=2,则可以让a1=an=min,在2 - n-1之间随意排序都满足但是还有一点,如果所有数&起来小于min,则也无解ll t,n,m;ll a[N];int main(){

2021-04-12 18:09:12 140

原创 基环树 Codeforces Round #686 (Div. 3) E题

基环树 Codeforces Round #686 (Div. 3) E题题意:给定一棵n个结点的基环树,求所有长度大于等于1的路径的个数解析:如果没有环的话,本来可以这么求,因为有环,如果经过环的话,环里可以沿顺时针或逆时针,所以还要多加上 cnt[i] * (n-cnt[i])cnt[i]代表环上挂着的子树的结点数,n-cnt[i]代表另外的那些结点,cnt[i]这些结点到另外的结点都有两路可以走。如上图a到b 这样。int main(){ scanf("%d",&t

2021-04-09 22:54:56 101

原创 二分、RMQ/单调栈 Codeforces Round #686 (Div. 3) F题

二分、RMQ/单调栈 Codeforces Round #686 (Div. 3) F题题意:将数组恰分成三段,第一段的最大值 = 第二段的最小值 = 第三段的最大值思路:看到有博主用单调栈做,看着还挺繁琐的然后学着用二分,RMQ做了一下如何二分? 满足单调性区间最大值随区间长度增大而增大区间最小值随区间长度增大而减小先枚举第一个分界点,然后二分第二个分界点,如果max1 < min1 || max1 < max2 说明第二个分界点应该往右移,让最小值更小点,第二个最大值更

2021-04-09 21:41:53 130

原创 模拟/贪心 Codeforces Round #699 (Div. 2) C题

模拟/贪心 Codeforces Round #699 (Div. 2) C题题意:给定初始颜色序列和最终目标颜色序列,再给定m个人,每个人必须按顺序给某一个格子染上ci的颜色,问是否可以染成目标序列。解析:将操作序列倒着考虑,如果有要染成c[i]这个颜色的,直接将它染成c[i],前面的人随意修改不影响如果没有要染成c[i]这个颜色的,就看是否是第一次染色如果不是第一次染色,则让res[i]=last就好,不影响如果是第一次染色,则看最终目标序列里有这个颜色,如果有这个颜色,就让res[i]

2021-04-07 17:20:42 62

原创 STL/set Codeforces Round #710 (Div. 3) E题

STL/set Codeforces Round #710 (Div. 3) E题题意:给一数组q,求原数组a,给定的数组的第i位表示原数组1到i的最大值。输出可能的原数组的最小字典序和最大字典序解析:如果q[i] = q[i-1],代表新的数字不大于所有前面出现过的数字如果q[i] > q[i-1],代表新的数字更新了最大值,a[i] = q[i]如果q[i] < q[i-1] ? 这不存在,因为q[i]代表从1到 i 的最大值策略- 先将所有确定的a[i]都定好,将未确定的数

2021-04-07 17:18:38 57

原创 递推/思维 Codeforces Round #693 (Div. 3) F题

递推/思维 Codeforces Round #693 (Div. 3) F题题意:给一个2 * n 的方格,要求用 1 * 2 的骨牌,横着或者竖着放,铺满整个方格。其中有一些被黑色方块阻挡,不能放骨牌 , 问是否可行?解析:首先,如果黑色堵块为奇数个,直接输出NO考虑 整个方格 第一列如果两行都是空的那么考虑第二列的几种情况: - 第二列也是空的,那么第一列可以竖着放。 - 第二列有一个方格被堵住了,那么第一列只能竖着放 - 第二列有两个方格

2021-04-07 17:17:28 80

原创 双指针 Codeforces Round #693 (Div. 3) E题

双指针 Codeforces Round #693 (Div. 3) E题题意:有n个人 高度h和宽度w,如果第i个人要排在第j个人的前面,那么必须得满足wi<wj&&hi<hj或者wi<hj&&hi<wj.对于每一个人,输出一个可以排在前面的人的下标,如果没有就输出-1,输出一种方案即可解析:双指针,先按照w从小到大排序,然后遍历数组,j指针在前面找w小于i 且 h最小的那个人int t,n,m;struct node{ in

2021-04-07 17:14:46 83

原创 贪心 Codeforces Round #712 (Div. 2) E题

https://codeforces.com/contest/1504/problem/E题意:有n个城市下标1<=i<=n,每个城市有ai和ci,从城市i到城市j要花费max(aj-ai,ci)。求从一个城市出发经过所有城市最后回到起点的最小花费解析:假设没有回到起点这个要求,仅仅只是要求从一个城市出发,然后经过所有城市的花费最小,我们可以按照ai从大到小排序,从a大的城市到a小的城市,这样从城市i到城市j,a[j] < a[i]所以每次的花费 = max(a[ j

2021-04-05 10:49:24 147

原创 dp/记忆化搜索 CodeCraft-21 and Codeforces Round #711 (Div. 2) C题

https://codeforces.com/contest/1498/problem/C题目大意:一个粒子年龄为k,一开始往右,每穿过一个板子年龄就会减1,且会产生一个向反方向的年龄为k-1的粒子(如果当前粒子年龄为1,则不会产生反方向的粒子)。给定n和k,n是由n个板子,k是初始粒子年龄。求出最后总共会有多少个粒子。样例:n=2,k=3;记忆化搜索和dp都行dp:集合:f[i,j]代表一个年龄为i要穿过j个板子的粒子,生成的所有粒子属性:sum状态转移方程:dp:#includ

2021-03-30 10:58:53 175

原创 kmp个人理解

看网上文字这么多看到最后却一头雾水。用博客记录目前我自己的理解。kmp模板:void Getnext(int next[],String t){ int j=0,k=-1; next[0]=-1; while(j<t.length-1) { if(k == -1 || t[j] == t[k]) { j++;k++; next[j] = k; } else k = next[k]; //

2020-09-22 22:59:27 74

原创 【RMQ】Hdu 3183 A Magic Lamp

给您一个整数,您可以删除准确的m位数字。左边的数字将形成一个新的整数。您应该将其最小化。 您无权更改数字顺序。#include <bits/stdc++.h>using namespace std;#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long ll;typedef pair<int,int> pii;typedef double d

2020-08-28 06:28:45 92

原创 【RMQ】Poj 2019 Cornfields (二维)

题意:给出一个 N * N 的矩阵(行列的编号都是 1-n),有 q 组询问,每组询问包含 row,col ,代表从 row行 ,col列 开始的 b * b 大小的矩阵,使其 max-min 值最大O(n * m * log(n) * log(m) - O(1) 方法int t,n,m,l,r,q,b,x,y;int a[maxn][maxn];int maxs[maxn][maxn][8][8];int mins[maxn][maxn][8][8];void RMQ(){ for

2020-08-26 09:31:32 72

原创 【LCA】Poj 1330 Nearest Common Ancestors

给x,y 求lca 复杂度O(n) 只计算一次lca则足够了 如果是多对结点需要更优化int t,n,m,x,y;vector<int> g[maxn];int root;int parent[maxn],depth[maxn];void dfs(int v,int d){ depth[v] = d; for(int i=0;i<g[v].size();i++){ dfs(g[v][i],d+1); }}void init(){ dfs(root,0);}

2020-08-26 07:49:11 82

原创 【线段树】Hdu3974 Assign the task(dfs序建简单线段树)

题目:公司里有从1到n共n个成员,除了董事长,每个人都有唯一一个直接上司。每个人都有若干下属,自己下属的下属仍然算作是自己的下属。当给某个成员分配工作时,该成员和其所有下属会立刻丢弃原来的工作,执行当前的工作。现在有两种操作(1)C x 查询成员x当前的工作内容(2)T x y为成员x分配新的任务y。对于每次查询操作输出相应的结果#include <iostream>#include <cstring>#include <cstdio>#include <

2020-08-25 22:26:40 126

原创 【线段树】Hdu 4027 Can you answer these queries?

题意:有n艘战舰,每艘战舰的防护罩都有一定的能量,我军有秘密武器,每轰一次,一个区间内的战舰防护罩将为原来能量的开方,查询的则是这个区间内战舰防护罩的能量之和。解析:开根号开到1就可以停止了#include <bits/stdc++.h>using namespace std;#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long ll;typedef

2020-08-25 17:27:25 72

原创 【线段树】Zoj 1610 Count the Colors

题意:在一条线上绘制一些彩色的线段,某些先前绘制的线段可能会被后续的线段覆盖。 您的任务是计算最终可以看到的不同颜色的分段的数量。解析:用点 i+1 来表示线段[ i , i+1 ]#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 8000 + 10;int t,m,n,a,b,c,q,k;string s;int su

2020-08-25 17:09:58 104

原创 【线段树+离散化】Poj 2528 Mayor‘s posters

题意:给出一些区间,要按顺序将这些区间贴上海报,因此有些海报会被覆盖,求最终能看到多少种海报,只能看到一部分的也算。解析:因为一开始墙是空的,所以就不用build了,初始化sum数组都等于-1就好。因为没有求和求最大值之类的,只是求最后能显示在墙上的海报个数,所以也不用push_up,运用lazy-tag方法push_down往下更新就好,最后query对整体查询即可。#include <iostream>#include <cstring>#include <cs

2020-08-25 16:09:32 69

原创 【线段树】 hdu1698 Just a Hook

区间修改区间查询模板题稍微有点变形,一开始数组全是1,然后每次修改不是增加或减少,而是将那一段区间都变成1或2或3#include <iostream>using namespace std;const int maxn = 1e5 + 10;int t,m,n,a,b,c,q;long long sum[maxn << 2],add[maxn<<2];void push_up(int rt){ sum[rt] = sum[rt<<1] +.

2020-08-21 23:44:04 67

原创 【线段树】hdu1166 敌兵布阵 (单点修改区间查询模板)

#include <bits/stdc++.h>using namespace std;#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long ll;typedef pair<int,int> pii;typedef double db;const ll mod=1000000007;const int maxn=5e4+10;cons.

2020-08-21 23:36:30 87

原创 【构造】 2020杭电多校第七场1009 Increasing and Decreasing

Problem DescriptionNotice:Don’t output extra spaces at the end of one line.Given n,x,y, please construct a permutation of length n, satisfying that:The length of LIS(Longest Increasing Subsequence) is equal to x.The length of LDS(Longest Decreasing Su

2020-08-12 16:37:36 164

原创 hdu 1754 I Hate It (树状数组求区间最大和)(线段树单点修改)

很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。学生ID编号分别从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,

2020-08-11 20:59:58 114

原创 【RMQ】HDU5443 The Water Problem

题意:T组测试数据,每组测试数据有n个数组元素,接下来q次询问,求 [ l , r ] 内的最大值解析:RMQ模板题代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>using namespace s

2020-08-11 08:59:24 76

原创 【树状数组】HDU2838 Cow sorting

题意:n头母牛,每头牛都有一个暴躁值,要求对这n头母牛从小到大排序。只能进行对相邻母牛的调换操作,每次调换要花费的时间等于这相邻母牛暴躁值之和,求排序完之后所需要用的最短时间。解析:分析这么个情况:4 5 6 2按照排序,我们每次把最后的这个2往前调,这样一共有3次调换,每次都会用到2,总共花费的时间是 3次* 2 + 数字2之前 所有大于它的数字之和 。代码tree数组有两层,一层记录前面大于它的数字的个数,另一层记录前面大于他的数字之和。记得用longlong代码:#include

2020-08-11 08:53:56 99

原创 【树状数组】HDU 5775 Bubble Sort

题意:求每个数字从一开始的数组到最后冒泡排序结束,所到达的最右边的位置与最左边的位置之差。数组的数字是从1到 n 的。解析:一个数字到达的最右边的位置即为当前的位置+其后面的比它小的数字的个数一个数字到达的最左边的位置为 一开始的位置或者排完序的位置利用树状数组求解代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using names

2020-08-11 08:35:04 77

原创 【树状数组】hdu1556 Color the ball

N个气球排成一排,从左到右依次编号为1,2,3…N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?Input每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。当N = 0,输入结束。Output每个测试实例输出一

2020-08-11 08:19:11 108

空空如也

空空如也

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

TA关注的人

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