自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 结构体的排序

例题:要排序一个物体的长度和宽度。struct q{int l,w;};bool cmp1(q b,q c){ if(b.l==c.l) return b.w>c.w; else return b.l>c.l;}//优先长度比较,递减bool cmp2(q b,q c){ if(b.w==c.w) return b.l>c.l; else return b.w>c.w;}//优先宽度比较,递减int main(){ int n ;cin&gt

2022-03-22 11:30:24 503

原创 二进制有关的代码和思路

代码:x=3(000011)y=5(000101)左移、右移操作符:左移:x<<1得到x=6(000110)右移:y>>1得到y=2(00010)位与:两位同时为1才为1,否则为0&x&y=1位异或:值不同为1,否则为0^x^y=6位或:有一个1就是1|x|y=7思路:同一个数的位异或和加法对结果的奇偶性影响一样。...

2022-03-09 22:35:17 230

原创 STL笔记

map:描述:map适用于一对一的映射,比如一个学生对应一个学号,简单做法是string name[n],int id[n]。在name[]中找这个学生,找到后输出id。但缺点是要遍历所有name,复杂度O(n),效率低。而map可以快速实现这个查找。因为map用的是平衡二叉搜索树来存储访问。复杂度只有(log2n)。定义:拿student举例,map的定义为map<string,int>student赋值:student[“Tom”]=15。把“Tom”当成普通数组的下标来使用

2022-03-02 22:46:18 107

原创 12-13——12-19ACM笔记

CF897A Scarborough Fair#include<bits/stdc++.h>using namespace std;int main(){ int n,m,l,r; char x[1002],c1,c2; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>x[i]; } for(int i=1;i<=m;i++) { cin>>l>>r; ci

2021-12-19 23:29:37 255

原创 12-6——12-12ACM笔记

A. Make EvenPolycarp has an integer n that doesn’t contain the digit 0. He can do the following operation with his number several (possibly zero) times:Reverse the prefix of length l (in other words, l leftmost digits) of n. So, the leftmost digit is swa

2021-12-12 22:06:25 1830

原创 11-29——12-5ACM笔记

P1077 [NOIP2012 普及组] 摆花小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 mm 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 nn 种花,从 11 到 nn 标号。为了在门口展出更多种花,规定第 ii 种花不能超过 a_iai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。试编程计算,一共有多少种不同的摆花方案。#include<bits/stdc++.h>using namespace std;int min(int

2021-12-05 22:15:02 811

原创 11-22——11-28ACM笔记

P1090 [NOIP2004 提高组] 合并果子#include<bits/stdc++.h>using namespace std;priority_queue<int,vector<int>,greater<int> > q;int main(){int n;cin>>n;int i;int x;int a;int b;int sum=0;for(i=1;i<=n;i++){cin>>x;q.pu

2021-11-28 20:47:39 3928

原创 11.15——11.21ACM笔记

P1160 队列安排一个学校里老师要将班上NN个同学排成一列,同学被编号为1\sim N1∼N,他采取如下的方法:先将11号同学安排进队列,这时队列中只有他一个人;2-N2−N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1\sim (i -1)1∼(i−1)中某位同学(即之前已经入列的同学)的左边或右边;从队列中去掉M(M<N)M(M<N)个同学,其他同学位置顺序不变。在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。#includ

2021-11-21 19:49:32 749

原创 2021-11-7——2021-11-14ACM笔记

删数问题键盘输入一个高精度的正整数 NN(不超过 250250 位),去掉其中任意 kk 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 NN 和 kk,寻找一种方案使得剩下的数字组成的新数最小。 #include <bits/stdc++.h>using namespace std;int main(){char a[255];int k;int len;cin>>a;cin>>k;int j;int i;len=strle

2021-11-14 22:18:55 498

原创 2021-11-01——11-07ACM笔记

P1025 数的划分将整数 nn 分成 kk 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的。1,1,51,1,5;1,5,11,5,1;5,1,15,1,1.问有多少种不同的分法。#include<bits/stdc++.h>using namespace std;int main(){int i,j;int f[205][7]={0};int k,n;f[0][0]=1;cin>>n

2021-11-07 23:21:30 193

原创 10-24——10-31ACM笔记

1.树的计数我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序。两棵不同的树的 DFS 序有可能相同,并且它们的 BFS 序也有可能相同,例如下面两棵树的 DFS 序都是 1 2 4 5 3,BFS 序都是 1 2 3 4 5。题意十分简明,给定 dfs 序与 bfs 序,求这棵树树高的平均值。首先从 bfs 入手,因为 bfs 序可以的一段可以对应树的一层。记 dfndfn 为 ii 在 dfs 序中的位置,记 bfnbfn 为

2021-10-31 22:24:21 192

原创 10.17——10.24ACM笔记

1.产生数给出一个整数 nn(n \lt 10^{30}n<1030)和 kk 个变换规则(k \le 15k≤15)。规则:一位数可变换成另一个一位数。规则的右部不能为零。例如:n=234n=234。有规则(k=2k=2):22->5533->66上面的整数 234234 经过变换后可能产生出的整数为(包括原数):234234534534264264564564共 44 种不同的产生数。现在给出一个整数 nn 和 kk 个规则。求出经过任意次的变换(00次

2021-10-24 20:45:23 4132

原创 10-10——10-17ACM总结

做了下背包的题题目:给出两个数n,m。m代表求出的n的划分中最大值不能超过m。比如n=5,m=3。则用1,2,3这三个数去分割5。求方案数。f(n,m)代表求不超过m的n的划分数。f(n,m)=1;n=1或m=1f(n,m)=f(n,n);n<mf(n,m)=f(n,m-1);n==mf(n,m)=f(n-m,m)+f(n,m-1);n>m选m或不选m这个题n的范围是1000,m的范围是100,最后求出的划分数明显大于10^18,所以这里需要修改一下状态转移方程。状态转移方程:a

2021-10-17 23:12:57 82

原创 10.04——10.10ACM笔记

结束了搜索,开始刷DP的洛谷题。BFS和DFS代表性的知识点:1.八数妈问题:求转化的最少步数,可用BFS解决,共有9!=362880种情况,关键是如何标记已经访问过的状态,保证每次搜索得到的状态都是最小的步数,这里可将字符串转化成对应的整数来处理,可用康托展开来节省存储空间。关键在于查重来减少时间复杂度。2八皇后:打表、DFS、回溯判断、模块化编程、算复杂度关键在于如何递归和回溯。问题难在很难取在矩阵中判断行,列,对角线。判断皇后行列:如果在同一行,行号相同;在同一列,列好相同;在/对角线

2021-10-10 23:09:31 65

原创 2021-9-27-----2021-10-03ACM学习笔记

这周多了一天学习的时间,主要是做了洛谷BFS和DFS的题基本都是有时间就拿出来一个题反复看。有个旅行的题也写出了核心代码:void dfs(int x,int fa,int y,int z){s.push_back(x);for(auto i:v[x])if(i!=fa&&(i!=y||x!=z)&&(i!=z||x!=y))dfs(i,x,y,z);}这题数据范围是关键。有些数据有特殊性质,比如最多与城市相连的数量,然后求出求出字典序最优的方案。还有个题叫

2021-10-03 22:53:14 56

原创 2021-9-20———2021-9-26

这周熟悉了下课本上的动态DP的题然后做了下洛谷:试机题和从零开始。主要是重新做了下01背包的题,之前不太喜欢用的滚动数字也专门看了一下,看了书本上的步骤,理解更深刻了。洛谷上的题还没做到难的,下周要专门做下DP类型的题。总体上还是没做太多,但还是有些收获,课本上的这方面的课后题都做完了。...

2021-09-26 22:55:18 63

原创 ACM暑假总结

今年暑假学习效率并不高,本来以为能一直保持每天的学习时间,结果最后还是只学了两章的内容:搜索技术、高级数据结构搜索技术BFS和DFS都算是复习。组合和排列的解决办法和二进制数结合起来,有许多的新代码可以方便二进制的结合,做起来多了许多思路。第五章重点是看了并查集,做了一些题,对子节点、根节点的更新有了一些经验。一些题不适用并查集确实容易超时,非常重要对于二叉树来说,有遍历的方式有下面的几种:深度遍历:前序遍历、中序遍历、后序遍历、广度遍历按照二叉树的层次进行遍历。假期里刷题比较少,大部分都是课

2021-09-19 22:28:43 84

原创 ACM 5月16日-5月22日学习总结

学习内容:递归。DFS和BFS。总结内容:1.递归其实在前面的贪心和DP里就涉及到了递归,状态转移方程本身就是一种递归方程。和贪心差不多,都是要把大问题转化为小问题,其实和贪心的关键点也一样,就是找方程和终止、边缘数据的条件。最后调试过了一个递归方程。比较经典的就是斐波那契数列,之前也碰到过好多次了,学起来几乎相当于复习。2.广度优先搜索(BFS)与深度优先搜索(DFS)的对比及优缺点深度优先搜索:所遵循的搜索策略是尽可能“深”地搜索图。在深度优先搜索中,对于最新发现的结点,如果它还有以

2021-05-23 13:02:26 70

原创 ACM5月10日——5月15日总结

学习范围:背包和二分背包:种类:1.01背包:这次作业的第一题:Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …The bone collector had a big bag with

2021-05-15 23:20:02 65

原创 ACM第七周总结

这周开了区间DP,多亏了线性DP的学习,为新的一类问题的学习打上了基础,感觉难度还行了,不过还需要多做点题来区分问题的种类,感觉要不是专项训练真的想不出要用区间DP。套路:memset(dp, 0x3f, sizeof(dp));for (int i = 1; i <= n; i++) //区间长度为1的初始化dp[i][i] = 0;for (int len = 2; len <= n; len++) //枚举区间长度{for (int i = 1, j = len; j &lt

2021-04-24 23:40:59 109

原创 ACM第六周总结

这周其实是把经典DP给结了个尾,这时我才了解到还有其它类型的DP ,就是下一周的背包问题。这周总结就把老师讲的题的特点、思路捋一遍吧。例题:1.一个大逃亡的问题,要相同魔素才能存活,其中的特点是魔素累积到一定值会清零,并且状态转移方程要用三维中的一维来表示两人中的一人(这提供了这类问题的一种状态反应方程设计的思路)。用f[i][j][p][0/1]表示以ij结束的格子差值为p的由0或者1走到这一格子的方案数目。(0表示小a走的,1表示小b走的)f[i][j][p][0]+=f[i-1][j][(p-

2021-04-17 23:10:14 119 1

原创 ACM四五周学习总结

这两周学的DP例题种类很多,这类题最明显的特点就是递归。最开始碰到的难题实在是想不明白(主要是因为dp[i][j]到底等于什么、i,j的取值范围的思路不清晰)我们先拿简单的例题来慢慢理清这类问题的思路,然后逐渐提高难度。例题:这次做题里有个苹果树的题,大概就是说树上的虫子每一单位时间会左右转移(必须),问一树上的虫子最后会去哪。这个题思路算是最简单的了,dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1] (i时间,j树的位置),还有比较重要的部分是初始量的设置。这题的初始量是dp默

2021-04-11 00:40:53 60

原创 ACM第三周总结

学习总结:这周把贪心算法学完了,最关键的是学习了更加复杂的二维算法。其中二维贪心的核心是把两组数据中的一组数据按序排列,然后考虑另一组。一般先排列的是最优先考虑的因素。拿学生会的题来说:这题是说对于一定的通过率的命令,要通过主席的接受情况来让主席头发变灰更多,议员更不高兴。这种题和前面不一样的是要考虑两个因素,那么应该先考虑让主席头发变灰,如果变灰量相同,再考虑议员不高兴情况。然后还学了个湖的题,我觉着这个题非常有意思,首先这题的约束条件很多,从头开始梳理问题会比较难,但是如果把这个问题转化一

2021-03-28 00:47:13 106 1

原创 acm第二周总结

贪心算法思路:1.先判断需不需要贪心,贪心问题的诀窍是找到性价比最高的方式去选择物品和用部分去考虑整体,一般这类问题会有明确的限定条件,比如在一段时间内、在一定的空间内、是一种从全部中选择部分的问题。2.判断需要贪心后,要找贪心思路,有些题往往只需要考虑一个因素,比如Vjudge第二题,选择在同一时间内的最高的利润。这类问题是比较容易的,但还有部分问题难以看出怎样是最好的选择方式,比如这周学的奶牛吃花的问题,就需要假设去验证。思路如下:假设序列都由二元组组成,二元组是由D和T组成,那么对一个序列有相

2021-03-20 21:26:19 86

原创 大一ACM第一周总结(边练边改)

一、STL 二、贪心算法 小技巧: 万能头文件 1. #include<bits/stdc++.h> using namespace std; 2.sync_with_stdio(false)//可以使cin加快; 一: string:...

2021-03-13 15:53:25 77

空空如也

空空如也

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

TA关注的人

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