自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforces Round #765 (Div. 2)A-D

Codeforces Round #765 (Div. 2)A. Ancient Civilization分析按位讨论, 对于第i位, 如果1多就选1, 0多就选0. 最后就可以把答案凑出来.代码#include <bits/stdc++.h>using namespace std;//#pragma GCC optimize(2)#define close(); ios::sync_with_stdio(false);#define endl '\n'#define re

2022-01-13 21:19:51 465

原创 Codeforces Round #757 (Div. 2)题解A-D2

Codeforces Round #757 (Div. 2)A. Divan and a Store分析:排序后从小到大贪心即可。代码:#include <bits/stdc++.h>using namespace std;//#pragma GCC optimize(2)#define close(); ios::sync_with_stdio(false);#define endl '\n'#define rep(i, l, r) for(int i = l; i &l

2021-11-27 23:44:15 677

原创 Codeforces Round #756 (Div. 3)题解A-F

Codeforces Round #756 (Div. 3)A. Make Even分析:三种情况本身是偶数, 答案为0十进制最高位是偶数, 答案为1十进制非最高位存在偶数, 答案为2代码:#include <bits/stdc++.h>using namespace std;//#pragma GCC optimize(2)#define close(); ios::sync_with_stdio(false);#define endl '\n'#define

2021-11-26 14:17:16 571

原创 博弈论入门笔记

从小学奥数开始给定一堆石子, 共n个石子,两个玩家轮流取石子, 每次只能拿1个或2个或3个石子. 不能取石子的一方输. 问先手有无必胜策略.解:当且仅当n不为4的倍数的时候, 先手有必胜策略.我们可以将游戏的局面(即当前剩余的石子个数xxx)分成两类, x%4==0和x%4!=0, 不妨分别称之为P局面(必败局面)和N局面(必胜局面).当拿到N局面时,玩家可以将N局面改变成P局面; 当拿到P局面的时候, 玩家只能将P局面改成N局面. 最终x=0x=0x=0这个最终局面落在P局面.如下图所示:

2021-11-25 15:10:12 2715

原创 Codeforces Global Round 17题解A-D

Codeforces Global Round 17A. Anti Light’s Cell Guessing分析:考虑0的情况就行了。代码:#include <bits/stdc++.h>using namespace std;//#pragma GCC optimize(2)#define close(); ios::sync_with_stdio(false);#define endl '\n'#define rep(i, l, r) for(int i = l; i

2021-11-24 14:40:58 1109 4

原创 Educational Codeforces Round 115 (Rated for Div. 2)题解A-F

Educational Codeforces Round 115 (Rated for Div. 2)A. Computer Game分析:输出YES当且仅当,每一列都至少存在一个0.代码:#include <iostream>#include <algorithm>#include <queue>#include <cstring>#include <map>using namespace std;#define close

2021-10-11 21:42:47 786

原创 Codeforces Round #744 (Div. 3)题解A-G

Codeforces Round #744 (Div. 3)A. Casimir’s String Solitaire分析:不难发现,当且仅当B的个数等于A和C的个数的和时,可行。代码:#include <algorithm>#include <iostream>using namespace std;const int N = 500;char s[N];void solve(){ scanf("%s",s); int a, b; a = b

2021-09-29 15:45:24 526

原创 Codeforces Round #742 (Div. 2)题解A-E

Codeforces Round #742 (Div. 2)A. Domino Disaster描述:Alice有一个包含2行和n列的网格。她使用大小为1×2的n个多米诺骨牌完全覆盖网格(Alice可以垂直或水平放置它们),并且每个单元格应该由一个多米诺骨牌覆盖。现在,她决定向鲍勃展示一排网格。帮助Bob找出网格的另一行是什么样子分析:略。代码:#include <algorithm>#include <iostream>using namespace std;

2021-09-07 21:01:17 200

原创 Codeforces Round #741 (Div. 2)题解A-E

Codeforces Round #741 (Div. 2)传送门A. The Miracle and the Sleeper不难证明答案等于 r%(max⁡(l,⌊r2⌋+1))r\%(\max(l, \lfloor\frac{r}{2}\rfloor+1))r%(max(l,⌊2r​⌋+1))#include <algorithm>#include <iostream>using namespace std;void solve(){ int l, r

2021-09-02 21:25:43 214

原创 Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) 题解A-E

A. Digits Sum分析:显然以9结尾的十进制数都符合题目要求#include <iostream>#include <algorithm>using namespace std;int main(){ int t; cin >> t; while(t--) { int n; cin >> n; cout << (n/10) + ((n%10)/9) << en

2021-07-23 13:55:41 221

原创 Codeforces Round #727 (Div. 2)题解A-D

A. Contest Start分析:首先不难想到倒数第⌊t/x⌋\lfloor t/x\rfloor⌊t/x⌋个人开始, 每往后数一个人, 不满值会减一, 故可以得出:answer=n∗(n−1)2  ,n≤⌊t/x⌋answer = \frac{n*(n-1)}{2} \space \space ,n\le\lfloor t/x\rflooranswer=2n∗(n−1)​  ,n≤⌊t/x⌋考虑从倒数第⌊t/x⌋\lfloor t/x\rfloor⌊t/

2021-06-21 00:01:20 319

原创 Codeforces Round #726 (Div. 2)题解A-E1

A. Arithmetic Array分析:当sum大于n时,那么添加(sum-n)个0,当sum小于n时,只需要添加一个数即可。#include <iostream>using namespace std;int main(){ int t; cin >> t; while(t--) { int n; cin >> n; int sum = 0; for(int i = 0; i &l

2021-06-19 14:02:16 516 6

原创 算法学习笔记(1):普通莫队

莫队学习笔记概述莫队算法是由莫涛提出的算法,可以离线地解决一类区间查询问题,适用性极为广泛。普通莫队问题引入给定一个具有n个元素的序列a,元素下标由1到n。给定m次询问,每次询问给出一个区间[l,r][l,r][l,r], 并要求输出该区间的对应答案。如果该问题满足以下性质:如果已知[l,r][l,r][l,r]的答案, 就可以在O(1)O(1)O(1)的时间复杂度中得出[l−1,r],[l+1,r],[l,r−1],[l,r+1][l-1,r],[l+1,r],[l,r-1],[l,r+1

2021-06-16 18:32:54 259

原创 Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)题解A-D

A. Colour the Flag略#include <iostream>#include <algorithm>#include <string>using namespace std;char a[100][100]; int main(){ int t; cin >> t; while(t--) { int n, m; cin >> n >> m; stri

2021-06-14 09:22:54 305

原创 Codeforces Round #725 (Div. 3)题解A-G

A. Stone Game分析:考虑从两边删,还是从一遍删,选比较小的那个#include <iostream>#include <algorithm>using namespace std;int a[200];int main(){ int t; cin >> t; a[101] = 101; while(t--) { int n; cin >> n; int minx = 10

2021-06-11 09:26:46 428

原创 Codeforces Round #719 (Div. 3) 题解A-G

补题, 顺便写个题解。A. Do Not Be Distracted!分析:略。#include <iostream>#include <algorithm>#include <string>using namespace std;string s;int main(){ int t; cin >> t; while(t--) { int n; cin >> n >> s;

2021-06-09 21:49:18 133

原创 换根DP入门

简述换根DP是一类特殊的树形DP。在解题过程中,存在一类树上问题,要求我们求解每个节点做为根节点的时的一些数据的问题。朴素算法一般是O(n2)O(n^2)O(n2)地进行n次dfs。遇到这种问题时,我们可以通过考察根节点转移到相邻节点时的影响,从而得出状态转移方程,进而O(1)O(1)O(1)地转移根节点得到新的答案。最后达到将问题总的复杂度降到O(n)O(n)O(n)的目的。问题引入给定一棵n个节点无向树(n个节点,n-1条无向边的连通图),要求选出一个节点,使得该节点做为根节点时,所有节点的深度

2021-06-07 20:19:04 1003 1

原创 Codeforces Round #724 (Div. 2)题解A-D

A. Omkar and Bad Story分析:显然有负数存在不可能满足题意,故输出NO。如果只有非负数的话,那么直接输出以0开头,100结尾的,公差为1的等差数列即可。因为值域是[-100,100],而数组大小的限制是三百以内。代码:#include <iostream>#include <algorithm>using namespace std;int a[110];int main(){ int t; cin >> t; wh

2021-06-07 10:48:42 395 5

原创 Educational Codeforces Round 110 (Rated for Div. 2) 题解A-D

A. Fair Playoff分析:略#include <iostream>#include <algorithm>using namespace std;int a[10];int main(){ int t; cin >> t; while(t--) { for(int i = 0; i < 4; i++) cin >> a[i]; int x = max(a[0], a[1]),

2021-06-05 09:42:39 262

原创 Codeforces Round #723 (Div. 2) 题解A-C2

A. Mean Inequality分析:很简单的构造。代码:#include <iostream>#include <algorithm>#include <vector>using namespace std;const int N = 100;int a[N], b[N];int main(){ int t; cin >> t; while(t--) { int n; cin >>

2021-06-03 17:54:27 302

原创 Codeforces Round #722 (Div. 2)题解(A-D)

Codeforces Round #722 (Div. 2)题解A. Eshag Loves Big Arrays分析:最小的元素是不可能被消除的,其余比最小元素严格大的元素都可以和最小元素组成一对然后被消除。因此最后只会有最小元素留下来。#include <algorithm>#include <iostream>using namespace std;const int N = 3e5+100;int a[N]; int main(){ int t;

2021-05-25 13:41:03 188

原创 数据结构条目-单调队列

数据结构条目-单调队列名称:单调队列用途:用于解决滑动窗口类问题,时间复杂度为O(n)。描述:单调队列是一个双向队列(既可以在队首操作也可以在队尾操作),同时保证队列内的元素单调递增或递减。单调队列有4种操作:往单调队列中新增元素。新元素应该增加在队尾处。当新增元素破坏了单调性时,通过在队尾处删除元素来保证单调性,最后再加入新元素;有时候因为题干的限制,单调队列的长度是有上限的,当长度突破上限,此时应该在队首处删除元素来保证长度限制。查询队首。删除队首。删除队尾。实现:通过STL

2021-03-30 19:01:30 287

原创 数据结构条例-单调栈

数据结构条例-单调栈名称:单调栈用途:给定一个数组,使用O(n)的时间复杂度确定每个元素的下一个最大值(或最小值)。描述:单调栈是一个栈,同时保证栈内元素的单调性。单调栈有2种操作:往栈内新增元素。当新元素加入栈内会破坏栈内的单调性时,不停地弹出元素直到新增元素不会破坏栈内的单调性。新增元素就是弹出元素的下一个最大值(或最小值,具体情况视题目而定)。Pop。与普通栈(stack)的pop无异。实现:通过STL的stack可以实现。题目日志:洛谷P5788洛谷P5788代码实现:

2021-03-30 18:55:43 192

原创 威佐夫博弈

威佐夫博弈洛谷P2252:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。解:情况一:初始情况a,b同时为零,此时先手胜。情况二:初始情况a,b不同时为0。定义: 后手有必胜策略的局势,称之为奇异局势。观察得出第000种奇异局势(0,0),当a,b一方为

2021-02-13 18:31:05 354 1

原创 最近公共祖先(LCA) 倍增优化

最近公共祖先(LCA) 倍增优化定义最近公共祖先(Lowest Common Ancestor):两个节点的公共祖先节点中离根最远(即深度最深)的节点。性质uuu是vvv的祖先,当且仅当LCA(u,v)=uLCA(u,v)=uLCA(u,v)=u如果uuu不为vvv的祖先并且vvv不为uuu的祖先,那么u,vu,vu,v分别处于LCA(u,v)LCA(u,v)LCA(u,v)的两棵不同子树中记A,BA,BA,B分别为两个点集,有LCA(A∪B)=LCA(LCA(A),LCA(B))LCA(A

2021-02-12 15:53:39 301

原创 Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2)

题目链接A. Prison Break显然对矩阵四个角分别对(r,w)(r,w)(r,w)求距离取最大值即可。代码实现#include <iostream>#include <stdlib.h>#include <algorithm>using namespace std;int main(){ int t; cin >> t; while(t--) { int n, m, r, c;cin >

2020-11-29 19:49:29 227

原创 Codeforces Round #680 div2 题解(A-D)

题目链接A. Array Rearrangment将给定的a,b数组从小到大排序,然后a的第i个匹配b的第n-i-1个,若a[i]+b[n-i-1]>x, 则不合法。#include <bits/stdc++.h>using namespace std;int a[100], b[100];int main(){ int t; cin >> t; while(t--) { int n, k; cin >> n >> k;

2020-11-02 19:22:24 213

原创 洛谷P1087 FBI树 题解

建树为了满足题目的要求,我们完全可以建一棵用数组实现的完全二叉树。从题目给的字符串我们容易得出每个叶节点的取值(B\I)。同时如果我们知道了一个结点的两个孩子节点的取值(F\B\I),就可以推导出该父结点的的取值(F\B\I)。很自然地我们决定从下往上建树。用字符串1000来举例:后序遍历后序遍历用数组构建的二叉树的唯一一个比较纠结的点就是如何判断有无左右孩子。我的做法是设置一个size,大于size是即为没有该孩子结点。代码实现#include <bits/stdc++.h&gt

2020-08-14 00:56:47 325

原创 洛谷P1030已知二叉树的后序遍历和中序遍历,求前序遍历

原题链接前中后序遍历的差别大家都知道,就不再赘述了。根据后序遍历的特性,我们知道最后一个输出的结点,在题目样例中是A,是这棵二叉树的根节点。再根据中序遍历的特性,在根节点左边输出的结点都是左子树的结点,在根节点右边输出的结点都是右子树的结点。也就是说,B是根节点的左子树的结点,DC是根节点的右子树的结点。递归地,我们容易还原出这棵二叉树。在我们判断A是根节点的时候,显然A是前序遍历的第一个输出结点,我们将其输出。递归地,可以得出整个前序遍历的输出顺序。代码如下:#include <bit

2020-08-12 00:37:19 363

原创 PTA 最大子列和问题 C语言实现

题目链接最大子列和是一道很经典的题目。有许多种解法,时间复杂度从O(N2),到O(N log N),再到O(N)都有。这里只讨论O(N)的解法。用now来存储目前子列最大和,用max来存储历史子列最大和。当now小于0时,即当前的这串子列无法再对我们寻找的最大子列的和做贡献,此时我们便舍弃掉这串子列和,从下一个元素开始重新计算目前子列和。巧妙的是,这样便使得我们的目前子列和永远处在“从第一个元素开始往后做和,无论在哪个元素停下来这个和都是正数,对子列和的贡献为正”的状态。不难用数学归纳法证明,具有最大

2020-07-06 22:52:12 414

原创 PTA《数据结构与算法题目集(中文)》函数题第四题 链式表的按序号查找

题目链接链式表的按序号查找首先检测K的合法性,K应该是一个正整数。显然寻找第K个元素需要寻找K-1次后继,因此先对K减一来进行预处理。之后寻找K-1次后继即可。如果中途L成为了空指针,说明没有第K个元素,K太大了。此时应立即返回,避免对空指针是用运算符->,这会导致段错误(Segmentation Fault)。ElementType FindKth( List L, int K ){ if(K <= 0) return ERROR; K--; while(K--) { i

2020-07-06 22:21:24 212

原创 PTA《数据结构与算法题目集(中文)》函数题第三题

题目链接题目描述唯一需要注意的是空表是特殊情况,应该分开讨论。对空指针是用->运算符会导致段错误(Segmentation Fault)。int Length( List L ){ int cnt; if(L == NULL) cnt = 0; else { cnt = 1; while(L->Next != NULL) { L = L->Next; cnt++; } } return cnt;}...

2020-07-06 22:12:31 193

原创 PTA《数据结构与算法题目集(中文)》函数题第二题

题目地址题目描述:实现顺序表的操作集1.创建并返回一个空的顺序表 List MakeEmpty();显然这线性表与普通链表的唯一区别是有一个Last变量告诉我们数组的最后一个元素的所在下标。因此我们只需要将变量Last初始化为-1即可。List MakeEmpty(){ List L = (List) malloc( sizeof(struct LNode) ); L->Last = -1; return L;}2.在线性表中查找元素X,成功则返回下标,失败返回ERROR(已定

2020-07-06 22:02:42 367

原创 PTA的《数据结构与算法题目集(中文)》函数题第一题

PTA的《数据结构与算法题目集(中文)》函数题第一题题目地址题目描述:实现一个函数,将所给链表逆转图解如下代码实现List Reverse( List L ){ if( L == NULL || L->Next == NULL ) return L; List temp1 = NULL, temp2 = L; L = L->Next; while( L != NULL ) { temp2->Next = temp1; temp1 = temp2; t

2020-07-06 21:25:24 290

原创 关于PTA基础编程题目集 7-5表格输出

关于PTA基础编程题目集7-5表格输出正确代码#include<stdio.h>int main(int argc,char** argv){ printf("------------------------------------\n\Province Area(km2) Pop.(10K)\n\-------------------------...

2019-10-02 18:29:03 594

空空如也

空空如也

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

TA关注的人

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