自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 3.6日题解

1.tokitsukaze and Connection题目大意:字符串中的相同字符是不是全部在一起思路:对于每一个字符,判断是否出现过,出现过则判断它的上一个字母与现在的是否相同,相同则连续,否则不连续;没出现过则对他标记代表它出现过了我出现的错误:在输出no的情况里,忘记了break;导致一个样例可能有多个no的输出#include <bits/stdc++.h>using namespace std;int a[1000];int main(){ memset(

2022-03-06 22:52:24 286 1

原创 2月16日刷题记录

1.The Biggest Water Problem思路:直接暴力,但是后来发现标签是递归;暴力代码#include <bits/stdc++.h>using namespace std;const int N=1e6;int n,m;void solve(){ cin>>n; while(n>9) { int ans=0; while(n>0) { ans+=n%10; n/=10; } n=ans; } c

2022-02-16 09:22:53 555

原创 牛客2021秋季算法入门班第五章习题:优先队列、并查集

1.[NOIP2004]合并果子思路:这是一道贪心题,要想使消耗的体力最小,那么我们每次合并最小的两个数,一直重复该操作到只剩下最后一个数即可;至于如何取最小的两个数,我们可以使用优先队列来实现#include <bits/stdc++.h>using namespace std;#define f(n) for(int i=1;i<=n;i++)#define fo(m) for(int j=1;j<=m;j++)#define mem(a,b) memset(a,b

2022-02-05 20:58:07 787

原创 牛客练习赛50

A. tokitsukaze and Connection题目链接题意:给你一个全由小写字母构成的字符串,判断这个字符串中的同种字母是不是全部连在一起;思路:直接暴力for一遍,从第二个字母开始,判断当前字母有没有出现过,如果出现过并且与前面那个字母不同,则同种字母不是全部连在一起的#include <bits/stdc++.h>using namespace std;#define f(n) for(int i=1;i<=n;i++)#define fo(m) for(in

2022-02-04 17:23:13 640

原创 dp算法入门

1.第一道题是2021年牛客寒假算法训练营第一场的A题https://ac.nowcoder.com/acm/contest/9981/A题面:长度不超过n,且包含子序列“us”的、只由小写字母构成的字符串有多少个? 答案对10^9+7取模。所谓子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。例如,"unoacscc"包含子序列"us",但"scscucu"则不包含子序列"us"n>=2;首先dp[i][j]的意思为;i表示前i个字母中;j=0时,表示没有u的串的数量

2022-02-02 16:33:31 887

原创 数据结构之拓扑排序

1.拓扑排序为了我们的代码可以跑的更快,我们这里使用数组模拟的单链表来构造:存储信息的邻接表int h[N],e[N],ne[N],idx;int d[N],值为点i的入度h[N]的值为头节点所指向的位置;e[idx]的值为一条路径上到达的点,比如存储一条边a->c,e[idx]的值就是cen[idx]的值为当前点指向哪一个点idx的值为当前我们加入的是第几个点将一条边的信息加入邻接表的操作如下void add(int a,int b){ e[idx]=b; ne[idx]=

2022-02-02 16:03:11 813

原创 cf div3 762 题解

1.A.Square String?题目链接:https://codeforces.com/contest/1619/problem/A大致题意:如果一个字符串在一行中被写了两次,那么这个字符串就叫做square,判断一个字符串是不是square思路:很明显,判断前半部分与后半部分是否相同即可特别的,如果字符串长度为奇数,必然不是#include <bits/stdc++.h>using namespace std;void solve(){ string s;

2021-12-23 22:27:48 2796

原创 二叉树的存储

1.二叉树的顺序存储2.二叉树的链接存储①.二叉链表的存储②三叉链表的存储二叉链表法建立二叉树#include <stdio.h>#include <bits/stdc++.h>#define maxsize 10//#define NULL 0using namespace std;typedef struct node { char data; struct node *lchild,*rchild;}Bitree;Bitre

2021-12-12 15:16:40 1908

原创 二叉树的性质

1.二叉树的性质

2021-12-12 12:15:21 263

原创 二分专题练习

二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本1当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。C++ 代码模板:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >&gt

2021-12-09 15:00:47 168

原创 博弈论专题

先简单的介绍一下^0^0=0;0^1=1;1^0=1;1^1=0;1.一道非常经典的博弈论题目链接 https://www.acwing.com/problem/content/893/对于这题我们只需要int res=0;将res与每一堆的石子数量异或一下最后判断res是不是0;是0则必败,不是0则必胜;#include <bits/stdc++.h>using namespace std;int a[100010];int main(){ int

2021-12-08 21:25:23 189

原创 全排列(dfs)

1.题目链接https://www.acwing.com/problem/content/844/2.题意给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法现在,请你按照字典序将所有的排列方法输出3.思路如何用 dfs 解决全排列问题?dfs 最重要的是搜索顺序。用什么顺序遍历所有方案。对于全排列问题,以 n = 3 为例,可以这样进行搜索:用 path 数组保存排列,当排列的长度为 n 时,是一种方案,输出。用 state 数组表示数字是否用过。当 state[i] 为

2021-12-07 10:55:15 354

原创 小叶的巡查

1.题目链接https://ac.nowcoder.com/acm/contest/181/D2.大致题意任何一个大城市都能从首都直接或者通过其他大城市间接到达,在走第x-1千米到第x千米这一千米中(x是整数),他花费的路费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。现在组织想知道:小叶从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?3.思路我们把首都看作根节点,各个城市看成书的节点,从根节点开始深搜一遍,找到距离根节点权值和最大的节点A1,再从

2021-12-07 10:44:13 99

原创 三种结构体排序方法

1.重载小于运算符#include <bits/stdc++.h>using namespace std;struct jie{ int x; int y; bool operator<(const jie &m) const//这里的m自己随便写 { if(x==m.x) return y>m.y;//这里写你想要如何排序 else return x>m.x;//例如x>=m.x就是按x从大到小排序 }}a[1000];//在这里定义

2021-11-30 10:37:11 1367

原创 ACPC Kickoff 2021

A.Sakally Soldier题目链接https://codeforces.com/gym/103158/problem/A思路找到第i*(i+1)/2的位置即可#include <bits/stdc++.h>using namespace std;int main(){ int t,n,j,i; cin>>t; while(t--) { int sum=0; cin>>n; j=0,i=1; while(j<=n) {

2021-08-22 19:40:24 199

原创 2021CCPC华为云挑战赛

1001、对象存储调度问题题目链接https://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1001&cid=1029题意将 n 个大小为2的整数次幂的数放到 m 个一定空间的分条内,问能否放入。思路:首先可以用贪心的思想,把最大的数据往剩余空间最大的分条内放,将数据从大到小排序,再用一个堆来存放所有分条。由于数据都是2的整数次幂,所以用二进制的方法也是可以 ac 的#include<bits/stdc++.h&gt

2021-08-22 19:37:06 380

原创 2021CCPC华为云挑战赛热身赛

A.题目链接https://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1001&cid=1030题意:简单来说必须立足于当前值等于A序列中的一个值才能去增加解题思路【0,ki】范围内的值并且k- -。贪心的想法就是尽可能的让最终自己的数大,我们先从A序列中选一个最大的数且处于【0,m】以内,然后每次转移的时候判断a[i]-a[i-1]的差值即可,当累计的差值大于当前有效k时就给自己的值进行上一轮的值更新,再继续处理下去ll a

2021-08-22 19:30:34 326

原创 The 15-th BIT Campus Programming Contest - Onsite Round

1.Just Multiplicative Inverse这个题有两种做法,第二种做法比较好想,但是需要优化一下。这里先说第一种做法(拉格朗日插值或者高斯消元)首先题目给我们限定了F ( i ) F(i)F(i)的取值范围,对于每个F ( i ) F(i)F(i),至多有三种选择:因此我们可以3 5 3^{5}35枚举出F FF函数的值。这样F FF函数定了,那现在问题就转换成了知道经过5 55个点的4 44次多项式,求出这个多项式的系数。这个问题可以用拉格朗日差值法或者高斯消元解决。具体

2021-08-08 20:31:16 224

原创 2020 Jiangsu Collegiate Programming Contest

1.Cats题意:有n个房子,你要把猫放进房子里,每个房子必须要放一个,猫的身高从1-20;猫有个毛病:身高相同的不能放一起,两个身高相同的之间的猫之间至少得有一只猫的身高比他们的身高小题解:找规律吧,比如说如果猫的身高为1的话就只能出现一次,2的话就只能出现两次,3只能出现四次(插空)…比如说:1只猫:12只猫可以这样:2 1 2之后就是:3 2 3 1 3 2 34 3 4 2 4 3 4 1 4 3 4 2 4 3 4…#include<bits/stdc++.h>

2021-08-08 20:20:55 180

原创 2021 ECNU Campus Invitational Contest

1.Edge Game容易想到的一个思路是:找到两点间的最短路,然后判断最短路的奇偶性。奇数则赢,偶数则负。最短路可以跑D i j s t r a DijstraDijstra,也可以S P F A SPFASPFA,但是需要堆优化(p r i o r i t y _ q u e u e priority_queuepriority_queue),直接C o p y CopyCopy标准模板修改一下即可。需要注意的是:1.建双向边 2.边权置1#include <bits/stdc++.h&g

2021-08-08 20:11:15 203

原创 cf 800分练习

4A - Watermelon题目链接https://codeforces.com/problemset/problem/4/A题意:将一个重为w的西瓜分为两部分,每部分都是偶数题解显然大于2的偶数才符合,而不是单纯的偶数就符合#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; if(n&1||n==2) cout<<"NO"<<end.

2021-08-07 13:34:57 201

原创 The 16th Heilongjiang Provincial Collegiate Programming Contest

1.题意:一棵树,每个点代表一条边,每次选择几个点,需要把他的祖先也选上,然后把图里面相应的边连接上,问连接后的图有多少个联通块。题解:可持续化并查集,每个顶点开一个并查集,维护从根节点到当前节点已经连接的图,再把自己这条边连上。查询,把所有点的并查集合并一下就可以,然后输出合并后并查集块的个数#include<bits/stdc++.h>using namespace std;const int maxn=5e2+2;const int maxm=1e4+5;bool u[max

2021-08-02 09:36:33 499

原创 2021 Xinjiang Provincial Collegiate Programming Contest

G cocktail with snake大致题意:在n * m的点阵里,点A从(1, 1)出发,沿题意所示的方向进行弓形走位(就是遇到边界就会向上拐弯),问走到第k步时的曼哈顿距离分析:这类题的难点是判断当前的位置是往右边界去还是从右边界回来(分奇偶)注意到向上这一段距离也可等效于(看成)水平方向上从x = 0 ~ x = 1 这一段因此,当再次回到 x = 1直线上时为一个周期,此时恰好水平方向上一个来回,走了两个拐弯,此时d = 2 * n所以通过判断 k % n的值进行分类讨论即可,而k

2021-08-02 09:23:32 345

原创 vector

#include<vector>vector<int> a,b;//b为向量,将b的0-2个元素赋值给向量aa.assign(b.begin(),b.begin()+3);//a含有4个值为2的元素a.assign(4,2);//返回a的最后一个元素a.back();//返回a的第一个元素a.front();//返回a的第i元素,当且仅当a存在a[i];//清空a中的元素a.clear();//判断a是否为空,空则返回true,非空则返回fal

2021-07-29 16:41:07 62

原创 acwing 每日一题7.26——7.28

7.28 AcWing 3783. 第 k 个除数题目链接https://www.acwing.com/problem/content/3786/题意找到第k个整除n的数解题思路:直接模拟i=1 到i=sqrt(n);因为i和n/i是对应的#include <bits/stdc++.h>using namespace std;typedef long long ll;int main() { ll n, k; cin >> n &g

2021-07-29 16:06:52 174

原创 The 2021 Shanghai Collegiate Programming Contest

A.小 A 的点面论(签到题)https://codeforces.com/gym/103186/problem/A题意:给你两个不共线的向量,求出与这两个向量都垂直的向量题目要求:请确保输出的每一维都是 [−200,200] 之间的整数,且这个向量不是零向量将两个向量看成一个平面,则该平面的法线向量与两向量都垂直c=ab;求两向量的叉乘即可若a=(x1,x2,x3)b=(y1,y2,y3)则c=(x2y3-x3y2,x3y1-x1y3,x1y2-x2*y1)#include &lt

2021-07-26 19:13:19 445

原创 Codeforces Global Round 15

A题(签到)题目链接https://codeforces.com/contest/1552/problem/A题意:给我们一个长度为n的字符串,我们选出其中k个字母,对这k个字母进行操作,使这个字符串变为按字母表顺序排列的求最小的k;思路:1.刚开始的错误思路;想着遍历一遍,记录每个字母出现的次数,将字符串变为按顺序排列后,记录每个字母应该对应的位置,也就是i再将原字符串遍历,找到对应位置字母不同的k++这么写十分的复杂易错;2.ac 代码的思路将原字符串排序,将两个字符串逐字符对

2021-07-26 10:22:25 106

原创 The 2021 Sichuan Provincial Collegiate Programming Contest

B分析:2 n 2n2n次就会是一个循环,所以只需要模拟2 n 2n2n次以内的所有情况即可#include "bits/stdc++.h"using namespace std;const int maxn = 1e5 + 10;int T, n, k, m, vis[maxn];pair<int, int> p[maxn];int main() { // freopen("in.txt", "r", stdin); scanf("%d", &T); whil

2021-07-25 18:51:02 163

原创 2021 Shandong Provincial Collegiate Programming Contest 2021年山东省大学生编程大赛

题目链接https://codeforces.com/gym/103118/problem/M首先我们分析一下题意1.给定一个0/1矩阵C ,要求构造0/1矩阵A 和B 满足下列条件。(矩阵C的最外围一圈为0)23.要求矩阵A和B的1联通我的解题思路如下:1.如果几条横线加几条通过横线的竖线,那么这上面的数字1是肯定可以联通的2.如果我令矩阵a的奇数行全为1,偶数行全为0(注意对最后一列不操作,因为题目要求矩阵c外围一圈为0);令矩阵b的奇数行全为0,偶数行全为1,则得到的新的矩阵全为0

2021-07-21 21:19:32 844

原创 三元数异或

acwing3764. 三元数异或先上题目链接https://www.acwing.com/problem/content/3767/异或又叫做不进位加法先谈我的错误上错误代码我们可以看到开头处for(int i=1;i<=n;i++) cin>>c[i]这个地方我的本意是输入一个数的各位上的数,也就是22222,我5次输入2,这是最大的错误,因为这样写输入的是5个数,而不是一个5位数各个数位上的数要完成我的想法,我们可以定义一个字符串,再利用for(auto x:

2021-07-16 16:01:21 1546

原创 float与double的区别

float与double的区别:float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。关于输入,float用%f,double用%lf而输出时,无论是float还是double,都用%f...

2021-02-24 18:46:41 256

原创 如何区分形参与实参

如何区分形参和实参先上代码#include <stdio.h>void swap(int a,int b);int main(){int a=5;int b=6;swap(a,b);printf("%d %d",a,b);return 0; }void swap(int a,int b){int t;t=a;a=b;b=t;}这是一个简单的swap函数,那么答应出来的啊,a,b是5和6还是6和5呢?当然是5和6了!!!形参和实参的称呼具有迷惑性,我更

2021-02-23 20:53:06 3602

空空如也

空空如也

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

TA关注的人

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