- 博客(58)
- 收藏
- 关注
原创 find
1.string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记。可以设为-1(返回值可以看成是一个int型的数)有前缀s.string s;int t=s.find("!");if(t != s.npos) 找到了;else 没找到;2.vector无前缀vector<int>::iterator it = find(vec.begin(), vec.end(),9);if(it==vec.end()) 没找到
2020-10-16 17:18:24
201
原创 试题 算法训练 猴子吃包子
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T632题解:这个题看到要到小数点1000位,所以直接除是肯定不行的。所以我们可以模拟手算,先算出一位一位的,然后再根据四舍五入的规则,输出这里四舍五入有个极端情况比如说1.99999999.所以需要加1,然后一直到小数位不是9或者到了整数位,停止循环。因为是进一,如果不是九停止循环,还需要向他的·前一位进1,代码:#include<iostream>#include<algorithm&g
2020-10-16 16:26:55
127
原创 dp算法
一、动态规划动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决明确状态和转移两个问题二、例题例一:数字三角形有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数.13 24 10 14 3 2 20从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来,如何走才能使得这个和尽量大?输入:三角形的行数n,数字三角形的各个数(从上到下,从左到右)输出:最大的和。
2020-10-15 16:02:02
1018
原创 全排列和全组合
全排列算法:这里用到了dfs深度优先搜索的方法代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<map>#define maxn 10using namespace std;int a[10];int fl[maxn];int n,t;void dfs(int k){
2020-10-15 15:47:54
127
原创 queue
一、用法特点:先进先出队列操作1.求队列的第一项 队列名.front()2.求队列的最后一项 队列名.back()3.求队列的长度 队列名.size()4.弹出队列的第一个元素 队列名.pop()5.将一个元素放入队列 队列名.push()6.判断队列是否为空 队列名.empty()二、例题题目:Throwing cards away I UVA - 10935链接:https://vjudge.net/problem/UVA-10935题解:对队头队尾元素进行操作,所以用queue
2020-10-07 20:13:44
153
原创 vector例题
题目:#258. vector 使用练习题链接:https://syzoj.com/problem/258题解:太大的数组或其他要放在主函数外面代码:#include<vector>#include<cstdio>#include<iostream>#define maxn 100001using namespace std;vector<int>v[maxn];int main(){ int n,m;//n行m列 int t; s
2020-10-07 19:43:48
705
原创 map例题
题目一:B - Journey Planning题目解析:https://blog.csdn.net/qq_45712954/article/details/108953921题目二:CF4C Registration system题目链接:https://www.luogu.com.cn/problem/CF4C题解:用户名一对一,所以用map解答,用到了find函数代码:#include<map>#include<iostream>#include<stri
2020-10-07 19:23:04
382
原创 map+思维:B - Journey Planning
题目链接:https://vjudge.net/contest/399382#problem/B题解:相同一串的满足的条件是bj-bi=j-i,所以通过移项可以得到bj-j=bi-i,所以是个一对一关系,所以自然想到了map,相同的累加即可,最后得出最大值输出。代码:#include<iostream>#include<map>#include<string>#include<algorithm>#define maxx 400000using
2020-10-07 18:47:06
143
原创 水题+模拟:B - Fix You
题目链接:https://vjudge.net/contest/398579#problem/B题解:因为只有R和D,所以最后一定会到达最右边一列,或者最下边一行。所以只需要统计这两行即可。代码:#include<iostream>#include<algorithm>#include<cstdlib>#include<string>#define maxn 120using namespace std;typedef long long l
2020-10-05 20:36:45
83
原创 水题+尝试:A - Suborrays
题解:输出1——n的数,并且满足或运算大于等于j-i+1,即随便输出,怎么输出都对代码:#include<iostream>#include<algorithm>#include<cstdlib>using namespace std;typedef long long ll;int main(){ int n; int k; cin>>n; for(int i=0;i<n;i++) { cin>&g
2020-10-05 20:17:51
73
原创 题意+思维:C - Celex Update
题目链接:https://vjudge.net/contest/398291#problem/C题意:给出图形,只能向下向右
2020-10-05 19:54:49
87
原创 水题:B - Maria Breaks the Self-isolation
题目链接:https://vjudge.net/contest/398291#problem/B题意:一个人请客,每个客人到达条件是至少有ai个人到达(包括请客的人),试求最大的到达人数排序和序号比较即可#include<iostream>#include<algorithm>#include<cstdio>#include<string>#define maxn 110000typedef long long ll;ll a[maxn];
2020-10-05 17:51:03
111
原创 水题:A - Park Lighting
题目链接:https://vjudge.net/contest/398291#problem/A题解:一个灯能照亮相邻两个格,判断如果照亮所有格,需要几个灯代码#include<iostream>#include<algorithm>#include<cstdio>#include<string>using namespace std;int main(){ int t; scanf("%d",&t); whi
2020-10-05 17:48:01
54
原创 构造+思维:C - Prefix Flip (Easy Version)
题目链接:https://vjudge.net/contest/397850#problem/C题意:将01字串a可以进行多少次操作变成b。操作:将前缀i前面的数(包括i)是1的话变成0(是0的话变为1),然后再将其到前缀i之间的数反转。输出最少的操作数,并写出前缀i。题解:因为需要反转,所以优先考虑后面的,又因为后面的b[i]是由a[0]变成的。所以需要判断是否需要先变a[0]。如果a[0]和b[i]相等的话,因为要由1变成0,所以需要先改变a[0]。然后再将其反转代码:(复杂度(n*n))#i
2020-10-05 17:42:54
118
原创 博弈
现在遇到·的有两种做法1.从1往后一个一个判断,总结规律例:Good Luck in CET-4 Everybody!题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847题解:从1到9,发现3,6,9第二个人赢。于是发现当n%3==0的时候,第二个人赢。事后总结发现,不能留给对面可以取完的数,所以要对3取余数代码:#include<iostream>#include<algorithm>#include<cstd
2020-09-30 22:22:29
275
原创 C组group4:B - Sequential Nim
题目链接:https://vjudge.net/contest/397850#problem/B题解:简单博弈题,后手赢,无论是否为1,都会交换先后手,但当输入大于1的时候,后手赢。所以谁是后手,谁赢代码:#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>#define maxn 100100typedef
2020-09-30 21:32:00
98
转载 map的用法
https://blog.csdn.net/sevenjoin/article/details/819438641,map简介map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map
2020-09-28 20:20:18
1723
1
转载 set
原文链接:https://blog.csdn.net/yas12345678/article/details/52601454begin() ,返回set容器的第一个元素end() ,返回set容器的最后一个元素clear() ,删除set容器中的所有的元素empty() ,判断set容器是否为空max_size() ,返回set容器可能包含的元素最大个数size() ,返回当前set容器中的元素个数rbegin ,返回的值
2020-09-28 20:16:58
89
原创 二分模板
一、查找某个数(1<=i<=n)代码:int erfen(int k)//假设数组是递增数组,精确查找是否存在k,下标在(0<=i<n)范围里{ int left=0,right=n; while(left<right) { int mid=(left+right)/2; if(a[mid]<k) { left=mid+1; } else
2020-09-28 19:30:29
61
原创 B组group1:M - Maratona Brasileira de Popcorn
题目链接:https://vjudge.net/contest/397282#problem/M题解:这个题的意思时:c个人比赛吃东西,吃的东西必须满足两个条件:1.一个人吃的东西必须相邻2.每个地方的东西必须一个人全吃完求最小的时间这个题其实就是判断:把一段连续的数切c份,判断最大值最小是多少。对于这种求最小值得问题来说,可以二分总的大小来判断代码:#include<iostream>#include<algorithm>#include<string&g
2020-09-28 16:46:37
110
原创 B组group1:A - Artwork
题目链接:https://vjudge.net/contest/397282#problem/A题解:一个人能否从左下角到达右上角,而不经过圆形连接的区域。算法是储存左下角的点,逐个判断与他相邻的点,如果能4够到达右上角,那么该人到达不了右上角,注意每次路径都需要重置。代码:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace
2020-09-27 21:21:59
992
原创 B组group1:H - Hour for a Run
题目链接:https://vjudge.net/contest/397282#problem/H题意:水题,给定总长度,判断他的1/10,2/10……9/10是多少。(不能小于这个值)代码:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;int main(){ int n;//圈数个数 int k
2020-09-27 19:45:17
97
原创 B组group1:B - Buffoon
题目链接:https://vjudge.net/contest/397282#problem/B题解:水题,判断是否输入的数比第一个数大代码:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;int main(){ int n;//个数 int maxn,fl=0;//最大值,标志量 int
2020-09-27 19:34:49
177
原创 C组 group3:D - Grid-00100
题目链接:https://vjudge.net/contest/397104#problem/D题解:填一个01矩阵,满足sum和为k,且f(A)=(max®−min®)2+(max©−min©)2最小。这个题思路是尽可能让每一行,每一列的1的个数都相等,因此f(A)只存在两种情况,一种是每一行,每一列个数相等,那么的话f(A)即为0;当无法满足的时候max减去min也是1,所以f(A)即为2。现在考虑如何分布,因为均匀分布,所以每一行至少分布sum/n个。当无法整除时,前几行应该分布sum/n+1个
2020-09-27 19:04:03
65
原创 C组group3:C - A Cookie for You
题目链接:https://vjudge.net/contest/397104#problem/C题解:两类饼,两类人,一类人只吃多的,一类人只吃少的,判断会不会有人不够吃我们可以设两类饼为maxx,minn。当minn<只吃少的一类人数的时候,肯定不够吃。剩下的情况只吃少的够吃,我们发现当两类饼的个数相同时,如果饼的个数小于人的个数,那么不行,反之,可以。但这时候需要考虑能率能不能吃到一样多,即只吃多的那个人数是否大于等于maxx-minn,当满足这个条件就只需要判断maxx+minn与两类人
2020-09-27 16:56:34
63
原创 C组group3:B - Magical Calendar
题目链接:https://vjudge.net/contest/397104#problem/B题解:这个题意是日历有k天,判断当标记i天(1<=i<=r)时有多少种情况,每种情况需要满足以下两个条件:1.r天时连着的,不能断2.每一种情况不能通过平行移动变成其他种情况所以需要分两种情况跨行和不跨行。当跨行时,因为需要满足第一个条件,所以i必须大于r,并且此时有k种情况。当不跨行时,因为需要满足第二个条件,所以只有1种。然后循环累加即可。因为当i小于r时,是个等差数列,所以等差数列求和公
2020-09-27 16:45:10
105
原创 C组group3:A - Magical Sticks
题目链接:https://vjudge.net/contest/397104#problem/A题解:给定数字k,判断数字1,2,3,……,k。当经过两个数相加成另一个数,所得的数最多的个数。因为时是等差数列,当k为奇数时,因为会落下一个数,此处为最大的数,所以此处的和即为(n-1)/2+1,结果即为(n+1)/2当k为偶数时,当加和为中间的数相加时,个数最多。其实就相当于,如何从1加到100,是(1+100)*50,这样的话就是101的个数最多,那么个数即为(k)/2。所以答案为(n+1)/2。
2020-09-27 16:32:30
72
原创 C组group2 C - Game On Leaves
题目链接:https://vjudge.net/contest/396831#problem/C题解:给你一个连通无向图,可以选择去除某个点,与他相邻的边也会去掉。判断两个人如果选择最优算法的话,谁会赢。当x相邻的点的个数小于等于1时,直接先下的人会赢。当x相邻的点的个数大于1时初始的可以画为这样。最后会变成这个样子:当遇到这种情况时,谁先下谁输,所以只需要判断之前下的点的个数。即n-3个点的奇偶性。当为奇数时先下的赢;偶数时后下的赢代码:#include<iostream>#in
2020-09-27 16:20:01
106
原创 C组group2 A:Subsequence Hate
题目链接:https://vjudge.net/contest/396831#problem/B题解:判断经过多少步1变成0或者0变成1的转换可以不出现101,010这样的序列。即只出现全是0,或者全是1,或者一边全是0,一边全是1的序列。循环0的终点即可,然后在从开头循环到终点判断第一个数,从终点+1序列循环到字符串的终点判断第二个数需要变化的次数,然后综合四次取最小值即可。代码:#include<iostream>#include<string>#include<
2020-09-27 09:42:23
137
原创 C组group2 A - Odd Selection
题目链接:https://vjudge.net/contest/396831#problem/A题解:给定n个数,选定k个数,判定和是否能可以是偶数。开始想得是用dfs,但是tl了。后来发现偶数加对结果没有影响,所以只需要考虑奇数所能参与的范围,然后奇数是否可以是加偶数个,即和为偶数代码:#include<iostream>#include<string>#include<algorithm>using namespace std;#define max
2020-09-26 21:55:00
1212
原创 C组group1 C - Powered Addition
题目链接:https://vjudge.net/contest/396219#problem/C题解:判断一个数列通过加2的k次方变为非递减数列的最小操作数。多个项加减1次2的k次方算一次操作。一个项加减多个2的k次项算多次。这个地方只需要统计输入的最大值,与其后面的值的最大差值。最后计算可以经过多少次可以弥补这个差值。最后答案即为次数代码:#include<iostream>#include<string>#include<algorithm>#defin
2020-09-26 21:39:33
216
原创 C组group1 B - Sorted Adjacent Differences
题目链接:https://vjudge.net/contest/396219#problem/B题解:这个题是求出按两个数绝对值差递减进行排序,有一个误区,相等的不一定需要靠着,比如说5 -2 4 8 6 5,可以是5 4 5 6 -2 8,所以只需要排好序后,从中间开始,不断的向两边拓展,就会差值不断减小。代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath&
2020-09-26 11:43:44
117
原创 C组group1 A. Filling Diamonds
题目:A. Filling Diamonds题目链接:https://codeforces.com/problemset/problem/1339/A题解:水题·:判断长度为n的区域能最多放多少个边不相邻的三角形,当每个都放正中间放的时候,个数最多。所以个数为n个代码:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){ int t
2020-09-26 09:46:36
93
转载 6-1 带头结点的单链表就地逆置
链表的逆序参考链接:https://blog.csdn.net/qq_39871576/article/details/80613365?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-4-80613365.nonecase&utm_term=%E9%93%BE%E8%A1%A8%E5%B0%B1%E5%9C%B0%E9%80%86%E7%BD%AE%E7%AE%97%
2020-09-21 19:46:38
525
原创 天梯刷题第四题: Fire! UVA - 11624
题目链接:https://vjudge.net/problem/UVA-11624#author=zmyhh题目解析:此题一言难尽啊, 首先因为最短路径,很容易判断是bfs题。但是需要注意以下几点:1.火和人不能在一个队列里,因为只能存放一个数对,所以需要不断地查找火,然后复杂度便成为了O(n的3次方),超时。解决方法是火放在一个队列,人放在一个队列,统计火到达该点的最短时间,然后又变成一个bfs题,最后比较火到达该点的时间和人到达该点的时间,如果人到达时间少,便可以加入队列。2.因为输入字符串的长度
2020-09-12 09:40:42
88
原创 天梯刷题第三题: Prime Ring Problem HDU - 1016
题目链接:https://vjudge.net/problem/HDU-1016题解:水题,典型的dfs题,判断相邻的两个数之和是否为质数代码:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string>using namespace std;int ans[30];//储存答案int n;//n的个数bool zh
2020-09-11 20:22:10
65
原创 天梯刷题2: Pots POJ - 3414
题目链接:https://vjudge.net/problem/POJ-3414题解:此题是判断几步之后最快能到达最终状态,典型的bfs。需要注意:1.开始的杯子是空的2.储存步骤的新方法:结构体定义string来储存步骤编号和序数,string数组来表达代码: #include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<iomanip>
2020-09-11 19:49:41
103
原创 天梯赛刷题1:Prime Path
题目链接:https://vjudge.net/problem/POJ-3126题解:给两个数,判断如果只改变一个位数且只为素数的话,最少经过几步到达另一个数。如果无法到达,便输出imposs最短路径问题,可以用dfs来写,需要注意一个地方,不会仅存在只改变他们不同的位置,因此需要从1到9遍历。代码:#include<iostream>#include<algorithm>#include<string>#include<cstring>#in
2020-09-11 16:55:39
180
原创 刷题第十九题:Hangman Judge
题目链接:https://vjudge.net/problem/UVA-489#author=DaNao题解:需要注意如果猜对了的前提下,无论才多少次错的,都win算法是统计正确的字符串字符是否出现,并统计出现的个数,然后循环猜测的的字符串,如果正确,变为false,如果正确的个数等于出现的个数,那么就win,如果错误次数超过6次,则lose,其余情况为平局代码:#include<iostream>#include<cstring>#include<algorith
2020-09-07 18:12:57
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人