![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 53
acm
Echo_ac
不知未来怎样,现在一定全力以赴
展开
-
L3-1 那就别担心了 (30 分)——坑点,测试点分析
文章目录思路AC代码思路题目就是求从 AAA 到 BBB 的路径条数,和判断从 AAA 的路径是否都经过 BBB 。我们采用记忆化搜索来加速即可。这里主要为了说一下坑点,题目可能出现这样的情况:从 AAA 到 BBB 完全符合题目的条件,但是很多朋友可能没处理好,大家测测这个例子即可。5 51 22 33 54 52 41 2AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i原创 2022-04-20 12:02:20 · 587 阅读 · 2 评论 -
UNIQUE VISION Programming Contest 2022(AtCoder Beginner Contest 248)——E
题目传送门思路思路很简单,就是有亿点点细节。k=1:k=1:k=1: 答案显然是无限多个k!=1:k!=1:k!=1: 我们把所有直线存下来,然后看每条直线上有多少个点就可以得出答案。但是问题就出在存直线的时候,我们不能直接计算 y=kx+by=kx+by=kx+b , 因为这样浮点数误差很大。所以需要另辟蹊径,我们对斜截式变个形:这样对于每条直线,我们存下dx,dy,b∗dxdx,dy,b*dxdx,dy,b∗dx 即可,但是要注意dx,dydx,dydx,dy 存的时候应该除以它们的原创 2022-04-17 10:32:03 · 316 阅读 · 0 评论 -
C++ vector insert,erase简单用法——竞赛专用
insert在第 iii 个元素前插入,0≤i0 \leq i0≤ive.insert(ve.begin()+i,2);erase删除第 iii 个元素,0≤i0 \leq i0≤ive.erase(ve.begin()+1);示例#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define p原创 2022-04-14 17:13:48 · 1128 阅读 · 0 评论 -
L3-001 凑零钱 (30 分)——01背包+路径记录
题目思路凑出价值为 mmm的零钱等价于从 v[i]=w[i]v[i]=w[i]v[i]=w[i] 的01背包中凑出花费了体积为 mmm,最大价值为 mmm 的方案。我们将零钱金额从大到小排序,那么如果存在相同的方案,后来的字典序一定比之前的字典序小,所以直接更新即可。AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i&g原创 2022-03-27 23:31:51 · 536 阅读 · 0 评论 -
Daimayuan Online Judge #505. 三角果计数——思维+树上技巧
题目链接思路因为在树上,那么大概率存在些树上的一些规律技巧。 我们通过作图来看,发现只有三个点ABC在同一条路径上,就不能组成三角形。比如下图的ABD三个点,因为距离AB+BD=AD。不满足形成三角形的条件。只要不在同一条路径上的三个点就能形成三角形,那么我们枚举中转点。 比如下图的B,在它的三个子树里面每一个任选一个点出来就能组成三角形。对于不止三个子树的点,我们任选三个子树,再累加上答案。但是这样暴力枚举会超时。因为是选任意三个子树出来,我们可以这样想,当前枚举的子树A, 已经走过的子树原创 2022-03-18 14:43:45 · 631 阅读 · 1 评论 -
代码源每日一题Div1 108数数
题目链接思路我们用树状数组维护区间和,将数组 aaa 带着下标,按照值大小从小到大排序,再将每个询问,按照 hhh 值从小到达排序。然后我们遍历每个询问,对于当前的 hhh ,将数组 aaa 中小于等于的 hhh的数的下标 pospospos 进行,add(pos,1)add(pos,1)add(pos,1)。这个询问的答案就是 ask(ri)−ask(li−1)。ask(r_i) - ask(l_i-1)。ask(ri)−ask(li−1)。代码#include<bits/stdc++.原创 2022-03-03 16:11:14 · 342 阅读 · 0 评论 -
CF1545B AquaMoon and Chess——思维+组合数学
题目传送门思路题目中的两个操作可以看成将一对整体的 11 与前(后)面的一个 0 交换顺序。只有当一对11与一个0交换顺序时才会产生新的状态。如果给出的数据中连续的1 的个数是偶数,那么可以我们均分成x个11。可以看出每一个11,可以和任意的一个0交换顺序。所以假设11 的个数位 aaa, 0的个数为 bbb, 则排列的方案有 (a+b)!(a+b)!(a+b)! 种, 11内部排列不会产生新的状态,0内部排列不会产生新的状态。所以去除重复的种类,答案就是 (a+b)!a!b!\frac{(a+b)原创 2022-02-07 20:28:59 · 635 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)——测试点1 2 3分析
题目传送门思路测试点2:颜色必须为k种测试点1,3过不去,大概率是dfs写错了(如果是写的dfs),不能先判断走没走过,要先判断颜色是否一样代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define popk pop_back#define mem原创 2022-02-05 20:28:01 · 608 阅读 · 0 评论 -
L2-022 重排链表 (25 分)——测试点3分析
题目传送门思路纯模拟,测试点3过不了的原因是,可能有多个next为-1的结点,而只有一个是单链表上的,其他的都是多余的,解决这个坑点即可AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define popk pop_back#define mem(原创 2022-02-05 17:49:47 · 1051 阅读 · 0 评论 -
L2-020 功夫传人 (25 分)——简单做法+测试点1分析
题目传送门文章目录思路AC 代码思路这道题开一个数组记录一下编号为i的人的师傅是谁,以及它师傅的能力即可,这里注意一下得24分的情况,要注意祖师爷可能也是得道者,所以不会削减能力AC 代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define p原创 2022-02-05 16:55:48 · 1032 阅读 · 2 评论 -
AcWing 2014. 岛(USACO 2012 US Open Bronze Division)
题目链接思路:很容易想到对每个田地的高度进行从小到大的排序,再依次枚举每一个高度,看看海水涨到这个高度会不会对结果有什么影响。我们就看这个田地左右两边的田地的高度和它的关系,很容易看出只有这两种情况才会对结果有影响,-1的那三个图其实可能统一判断,具体见代码。但是这样有一个问题,就是可能出现这样的情况:中间有很多个相同高度的田,但是这些相同的其实可以看做一个田,对结果的影响是一样的,所以我们用到unique函数对初始高度进行去重注意更新答案的时候,要判断是否是枚举到不同的高度了,uniqu原创 2022-01-06 23:05:31 · 347 阅读 · 0 评论 -
L2-012 关于堆的判断 (25 分)
题目链接思路小根堆的建立+字符串处理,真的好爱考字符串呀。。。代码#include<bits/stdc++.h>using namespace std;const int N = 1e3+9;int a[N];unordered_map<int,int> pos;//堆化 void build(int n){ int t=n; while(t/2>=1 && a[t/2]>a[t]){ swap(a[t/2],a[t]);原创 2021-12-15 15:22:40 · 1164 阅读 · 0 评论 -
牛客挑战赛53——智乃哥哥的小迷题A
题目链接思路在不考虑回退的情况,我们能通过走 nnn 次到达 1+2+3+..n1+2+3+..n1+2+3+..n 的位置。也就是 1,3,6,10,15....1,3,6,10,15....1,3,6,10,15.... 这些点现在假设回退第一次在点0回退,本来要达到点1,回退后相当于- 2第一次在点1回退,本来要达到点3,回退后相当于- 3第一次在点3回退,本来要达到点6,回退后相当于- 4第一次在点6回退,本来要达到点10,回退后相当于- 5第一次在点10回退,本来要达到点15原创 2021-10-15 22:00:29 · 136 阅读 · 0 评论 -
哈夫曼编码和译码c++数组实现
做软工项目,组长说要把url地址加密,于是想到了哈夫曼编码。c++写了个初始模板,后续改改。本代码针对是是只包含字母和数字的字符串的编码和译码,可以改动一下变成通用。#include<bits/stdc++.h>using namespace std;const int N = 1e5+9;struct node{ int w;//结点权值 int p,lson,rson;//双亲,左孩子,右孩子下标 }Ht[N]; struct code{ char ch; s原创 2021-10-05 13:25:48 · 370 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)——段错误分析
题目链接分析思路就是并查集求连通块,答案等于连通块的数量-1段错误是因为M的范围大于1e5,我把数组开到1e6就能过AC代码#include<bits/stdc++.h>using namespace std;const int N = 1e6+9;int p[N];int find(int x){ if(x!=p[x]) p[x]=find(p[x]); return p[x];}void merge(int a,int b){ a=find(a),b=fi原创 2021-09-30 20:57:17 · 101 阅读 · 0 评论 -
1012 The Best Rank (25 分)——测试点2分析(坑点)
题目链接分析这道题思路就是结构体排序,但是超级坑。如果成绩是90 90 80 70的话,那么排名应该是1 1 3 4,真的超级无语AC代码#include<bits/stdc++.h>using namespace std;const int MAXN=1e5+9;#define N MAXNstruct node{ string id; int x; bool operator<(const node &t) const { return x&原创 2021-09-30 20:15:24 · 233 阅读 · 0 评论 -
SICNUOJ——meng新计划要求规范
文章目录出题规范命名规范编号命名规范:题目命名规范造数据代码模板SPJ模板代码补齐模式模板代码(c++)细节规范出题规范出题规范,命名规范洛谷题单参考洛谷,我简单那给大家理理编号命名规范:基础:00-xx-xx算法:01-xx-xx数据结构:03-xx-xx按照它这个顺序来,对于基础的题,顺序结构的题,我们命名为00-00-xx,分支结构命名为00-01-xx,以此类推必须严格按照编号命名规范,这样才能保证无论合适出题,在前台展示的题目都是有分类顺序的题目命名规范按照这个来原创 2021-09-30 15:06:16 · 388 阅读 · 0 评论 -
1004 Counting Leaves (30 分)——dfs遍历树
题目链接思路这道题思路很简单,题目给出了一棵树,让求每一层的叶子结点数。那么我们用邻接表存树,dfs进行遍历,从根节点出发,走到叶子结点了,那么对应的层数d,ans[d]++.AC代码#include<bits/stdc++.h>using namespace std;const int N = 168;vector<int> g[N];int ans[N],mx;//dfs遍历树 void dfs(int p,int d){ //取树的最大深度 m原创 2021-09-28 23:16:59 · 113 阅读 · 0 评论 -
1003 Emergency (25 分) 求最短路径条数+点权
题目链接思路就是模板题,在Dijkstra算法中每次更新到出发点距离是,判断一下,如果相等,那么就更新路径条数AC代码#include<bits/stdc++.h>#define mem(a,b) memset(a ,b,sizeof a)using namespace std;const int N = 520;int h[N*2],a[N],dis[N],cnt[N],num[N];bool st[N];int n,m,c1,c2,idx;struct node{原创 2021-09-26 15:26:40 · 71 阅读 · 0 评论 -
NC19427 换个角度思考——思维+树状数组/线段树
题目链接思路这道题思路挺新奇的,树状数组维护前缀和。先存下输入的每个询问,再按照k的值从小到大排序。对于a数组开一个结构体数组,存下下标和值,按照值从小到大排序。对于每一个kik_iki,将小于等于kik_iki的值的位置add 1。然后这个询问的答案就是ask® -ask(l-1)。因为已经按照k从小到大排序了,所以之前插入的k对之后没有影响AC代码#include<bits/stdc++.h>#define lp p<<1#define rp p<<原创 2021-09-24 16:52:14 · 155 阅读 · 0 评论 -
2021牛客寒假算法基础集训营1 蒟弱补题日记
比赛链接文章目录B括号题解:AC代码B括号题解:赛后被增加的数据hack了,正确应该这样做,首先左右两边括号相差更少这样更节省括号,那么我们令m=sqrt(k), a=k/m,b=k%r,首先输出m个左括号,并且再第b个左括号后面输出一个右括号。最后输出a个右括号AC代码#include<bits/stdc++.h>#define endl '\n'#define IOS ios::sync_with_stdio(false),cin.tie(0)#define mem(a,b原创 2021-09-22 15:24:33 · 107 阅读 · 0 评论 -
The 2021 ICPC Asia Regionals Online Contest (I) 部分题解
终究还是太菜,后面慢慢更新,只做了4题,如果有高数书应该可以5题的。反正还是菜!!!文章目录III题没什么好说的,好像许多人理解错题意了。我们队一发过的,看看代码即可#include<bits/stdc++.h>using namespace std;const int N = 2e5+9;int a[N];int main(){ int t=0; int x; while(~scanf("%d",&x)) { a[t++]=x; }原创 2021-09-19 18:50:31 · 999 阅读 · 0 评论 -
ACM竞赛 错误理解,坏习惯,定势思维纠正——血泪史
文章目录关于二分答案的定势思维纠正关于二分答案的定势思维纠正以前有风险的做法,二分后才记录答案 while(l<r) { ll mid=(l+r)>>1; if(check(mid)) { // ans=mid; r=mid; } else l=mid+1; } cout<<l<<endl;正确做法,二分的时候就记录答案 ll ans; while(l<=r) { ll mid=原创 2021-09-13 11:11:10 · 134 阅读 · 0 评论 -
ACM竞赛有趣题目
以下收集了本人刷题比赛过程中遇到的很有意思,锻炼思维,技巧的题目AtCoder Beginner Contest 217 E - Sorting Queries AtCoder Beginner Contest 217 D - Cutting Woods原创 2021-09-08 09:17:09 · 3004 阅读 · 0 评论 -
AtCoder Beginner Contest 217 E - Sorting Queries
题目链接思路对于1,2两个操作可以用队列q,简单的模拟即可,关键是第3个排序操作。 我们可以这样,开一个优先队列pq,对于插入操作,直接插入q对于排序操作,我们将q中的元素全部插入到pq中,我们可以肯定的是对于每 一次排序操作,这些数字肯定在后来插入的数之前(未进行下一次排序操作的时候是),前面有序,后面无序,所以对于操作2,如果优先队列里面有元素,那么输出弹出优先队列对头,否则弹出普通队列队头。#include<bits/stdc++.h>using namespa原创 2021-09-08 09:15:00 · 143 阅读 · 0 评论 -
ACM竞赛玄学技巧
文章目录精度方面答案是double ,但是题目要求保留到整数:精度方面答案是double ,但是题目要求保留到整数:错误做法printf("%.f\n",ans); 正确做法 printf("%d\n",(int)ans);原创 2021-08-31 10:35:23 · 124 阅读 · 1 评论 -
CCPC.2017哈尔滨站 K-th Number——二分答案,加套路
题目链接这道题本蒟弱拿到时不会做,参考了博客: 大佬题意每次对于数组A中的每一个连续的长度大于等于k的区间中第k大的数,加入B数组中,最后求B数组中第m大的数思路先说坑点,这里输入的m要开long lognB数组中第m大的数,我们可以假设为x。由于B数组中的每一个数都是A中某一个长度大于等于k的区间的第k大的数,所以B数组有m个大于等于x的数,相当于A中有m个区间,这些区间的第k大数都大于等于x。所以问题转换成,我们二分枚举每一个x,然后去检查,A当中是否有至少m个区间,这些区间的第k大数都原创 2021-08-25 10:14:41 · 111 阅读 · 0 评论 -
ACM竞赛板子
文章目录数学欧拉筛(线性筛)自己的板子积累,不断更新中数学欧拉筛(线性筛)时间复杂度O(n)void prime(int n){ for(int i=2; i<=n; i++) { if(!st[i]) p[ans++]=i; for(int j=0; p[j]<=n/i; j++) { st[p[j]*i]=1; if(i%p[j]==0) break; } }}......原创 2021-08-19 22:09:51 · 2242 阅读 · 0 评论 -
acm竞赛技巧——c/c++ /java 快读快写(整数,字符串)
文章目录整数快读快写字符串读入读出注意:本文参考博客整数这里用int做示范,long long,__int128 改下变量类型即可快读inline int rd(){ char ch=getchar(); int x=0,w=1; //过滤掉其他字符 while(ch<'0'|| ch>'9') { if(ch=='-') w=-1; ch=getchar(); } while(ch>='0' && ch<='9') {原创 2021-08-18 21:52:25 · 2007 阅读 · 0 评论 -
2021牛客暑期多校训练营10 F题
题目链接文章目录思路AC代码思路这道题很关键的在于将栈中的序列转为树结构,每一个入栈后的序列不同转为对于每一个父节点,他的孩子节点的颜色不能相同AC代码#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;#define pii pair<int,int> #define N 2000000+9#define mem(a,b) memset(a,b,size原创 2021-08-18 20:35:19 · 56 阅读 · 0 评论 -
01BFS经典题型
文章目录CF590C Three States思路:AC代码cf Jailbreak思路AC代码UVA11573 Ocean Currents思路AC代码未完,待更。。。CF590C Three StatesCF590C Three States思路:01bfs,然后枚举交点,AC代码#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define mem(a,b) memset(a,b,sizeof a)#define ll lon原创 2021-08-11 21:17:31 · 308 阅读 · 0 评论 -
Codeforces Round #736 (Div. 2)——C题解
Codeforces Round #736 (Div. 2) C思路觉得做法很神奇,感觉不难,就是自己没想到,写个题解记录一下。对于这道题,我们首先肯定的是,如果与一个点相连的另一个点,比它大,那么它一定会被删除,所以我们维护一下哪些点与比它大的点相连。我们记录这些点的入度,in[i]。初始时,对于给出的边u,v(u>v) ,那么v一定会被删除,in[v]++,在这之前判断当in[v]=0时,ans- -(ans初始化n),因为你一个点只能删除一次嘛。对于加边操作,1,u,v(u>v原创 2021-08-08 11:17:26 · 129 阅读 · 0 评论 -
ACM竞赛数论知识积累
文章目录斐波那契公约数直角三角形与勾股定理贝祖定理斐波那契公约数f(i)f(i)f(i) 代表斐波那契数列的第i项,gcd(f(a),f(b))=f(gcd(a,b))gcd(f(a),f(b))=f(gcd(a,b))gcd(f(a),f(b))=f(gcd(a,b))直角三角形与勾股定理给出一个整数a,求另外2个整数b,c, 使得a,b,c构成直角三角形a=0,1,2时,无法构成假设a为直角边a为奇数时, b=a2−12b=\frac{a^2-1}{2}b=2a2−1 c=b+原创 2021-05-24 15:30:09 · 568 阅读 · 2 评论 -
ACM数学之求组合数
文章目录递推法AC代码通过预处理逆元的方式求组合数AC代码卢卡斯定理求组合数AC代码总结递推法根据公式,Cab=Ca−1b+Ca−1b−1C_a^b=C_{a-1}^{b} + C_{a-1}^{b-1}Cab=Ca−1b+Ca−1b−1从实际意义理解:在a个苹果里面选b个苹果的方案:,先假设有一个苹果x,如果我们选了x,那么就在剩下的a-1个苹果里面选b-1个,如果不选x,那么就是在a-1个苹果里选b个时间复杂度:O(n2)O(n^2)O(n2)例题:求组合数1AC代码#inclu原创 2021-08-04 22:11:41 · 719 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2)——C
Codeforces Round #735 (Div. 2)文章目录思路AC代码思路设xxx为0~m中的任意一个数字,x⨁n=kx \bigoplus n=kx⨁n=k, 现在求x⨁nx \bigoplusnx⨁n的结果中未出现的最小非负整数。根绝异或运算的性质,n⨁k=xn \bigoplus k=xn⨁k=x, 对于所有出现的数字k,异或上n后的范围都在0~m之间,那么我们要找的未出现的最小非负整数异或上n后的范围肯定>=m+1,所以现在问题等价于寻找一个最小非负整数k,使得k⨁n≥原创 2021-07-30 19:23:06 · 84 阅读 · 0 评论 -
Codeforces Round #734 (Div. 3)——B2
Codeforces Round #734 (Div. 3)文章目录题意思路代码总结题意给你n个数字,和k种颜色,现在给这n个数字上色,每个数字可以不涂色k种颜色必须都用到,且每种颜色用到的数量相同相同的数字颜色不能相同尽可能多的涂色思路首先我们肯定,如果某种数字的个数超过了k,那么超过的部分一定不能涂色 。然后现在我们用结构体存储每种数字,和它的下标,超过的部分不存储。现在我们对存储过的数字,进行染色。假设现在有tt个数字,我们将这些数字按照值从小到大排序(从大到小也行),按照题.原创 2021-07-28 15:59:48 · 48 阅读 · 0 评论 -
ACM竞赛技巧判断两个浮点数是否能整除
竞赛玄学技巧,从逆十字代码中发现的#include<bits/stdc++.h>using namespace std;int main(){ double a=4.0,b=2.0; if(a/b-floor(a/b+1e-8)<=1e-9) puts("整除"); a=4.1,b=2.0; if(a/b-floor(a/b+1e-8)>1e-9) puts("不能整除"); return 0;}...原创 2021-07-27 09:48:16 · 350 阅读 · 0 评论 -
2021牛客暑期多校训练营3部分题解
比赛链接文章目录J思路代码总结B思路J思路这道题感觉很有思维首先这是一个完全图,对于每一个三角形有两种情况两边同色,一边异色三边同色我们发现从正面算三边同色的三角形很难算,那我们可以采取排除法,即用总的三角形个数sum=n∗(n−1)∗(n−2)6sum=\frac{n*(n-1)*(n-2)}{6}sum=6n∗(n−1)∗(n−2),减去异色三角形个数cntcntcnt,一个异色三角形有2个异色角,那么异色三角形的个数等于异色脚除以2。对于每个点,我们看它其他点构成多少个黑色边cnt原创 2021-07-26 11:19:28 · 116 阅读 · 0 评论 -
2021牛客暑期多校训练营2部分题解
比赛链接文章目录I题意思路代码K题意思路代码I题意给出20*20的地图,叫你求一个指令序列。使得A按照这个指令能够到达目的地,并且B在镜像中也能够到达目的地思路这道题明明思路不难,但是当初就是没写出来,因为犯了一个很xx的错误,唉,还是搜索写少了。注意,字符串存储最好从1开始,并且char数组开大一点,因为这样的判断后,可能入队的nx,ny是<=0的,或者>20的。我就是犯了这个错误,一直没调出来就是两人一起出发,A,B可以一起走,也可以只用一个人走。最后bfs搜出来一个最短序列原创 2021-07-26 10:50:04 · 130 阅读 · 0 评论 -
牛客 区区区间间间——单调栈+思维
题目链接文章目录题目思路参考代码总结题目思路一看数据范围是1e5就知道这道题大概率是个nlogn的做法,我们这样考虑:对于任意一个数aia_iai,它作为区间最大值(最小值)出现的次数,最后aia_iai对答案的贡献就是ai∗(max[i]−min[i])a_i*(max[i]-min[i])ai∗(max[i]−min[i]),累加起来即可如何求aia_iai作为最大值出现的次数呢?我们找到左边第一个比它大的数axa_xax,右边第一个比它大的数aya_yay, 那么在区间[原创 2021-07-15 23:16:03 · 188 阅读 · 1 评论