
我的ACM之路
ACM打得很菜,但是重在参与,并且练练脑子。
已经退了 ——2022.6.5
karshey
平平无奇打工人。
展开
-
【360秋招笔试】编程题第二题:修改Web(C++的AC解法)
但是看到编程题没有给异步输入数据的模板的时候傻眼了。被迫捡起用C++打题的记忆了,不然就寄了。使得等式两边成立,则输出Yes,否则输出No。很典型且要素很多的模拟题,字符串的计算+逆波兰表达式+枚举。想要进行计算,需要将等式(字符串)拆分为数字和字符。总体的过程:将字符串转换为数字和符号、计算。输入的数据范围并不大,所以枚举可以实现。这样,只需要改变参数就可以分别计算等号左边和等号右边。注意,数字的数量会比符号多1,因此可以先把第一个数字压入栈。代码写的乱乱的,也不精简,等有空的时候重新写一下。原创 2023-09-23 20:18:28 · 290 阅读 · 0 评论 -
【PTA】团体程序设计天梯赛-练习集 L3题目总结(不全)
模拟题STL题L3-002 特殊堆栈(两个vector)L3-002 特殊堆栈参考#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define mem(a,x) memset(a,x,sizeof(a));#define pb push_backtypedef long long ll;const int N=1e5+10;int n;vecto原创 2022-07-22 17:11:55 · 1272 阅读 · 0 评论 -
H-Permutation Counting 排列组合+并查集判环
原题链接输入:3 11 2输出:3说明:In the first sample, all valid permutations are \{1,2,3\},\{1,3,2\}{1,2,3},{1,3,2} and \{2,3,1\}{2,3,1}, so the answer is 33.输入:3 21 22 3输出:1输入:3 21 22 1输出:0输入:10 71 23 25 47 82 64 68 6输出:37800题意原创 2022-05-29 15:07:23 · 296 阅读 · 0 评论 -
“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛 A、H、K
原题链接A-Seventeen-构造输入:10输出:1+2+3+4+5+6+7+8-9-10说明:The following expression are considered right, too.-10+1+2+3+4+5+6+7+8-9((-10+1))+2+3+4+5+6+7+8-9(-10+1)+2+3+4+5+6+7+8-9题意:给出n,则1-n这n个数如何通过+、-、*、()得到17?思路:构造题。对所有n>=17都能得到17——17+0,其中0很原创 2022-05-26 21:19:21 · 437 阅读 · 0 评论 -
【江苏省赛】C - Cats 找规律+模拟
原题输入1:1输出1:1输入2:3输出2:1 2 3题意:1-20的数字,两个相同数字不能相邻,且他们之间的最小值要严格小于它们。思路:大的插在现有的空中间,如下:12 1 23 2 3 1 3 2 34 3 4 2 4 3 4 1 4 3 4 2 4代码:#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define原创 2022-05-14 18:35:23 · 175 阅读 · 0 评论 -
2021山东省赛 M - Matrix Problem 看样例+构造
原题输入:5 50000000100010100110000000输出:11110101001111011100111100000101111010110111100001题意:给只有01的矩阵C,求矩阵A、B。其中C中是1的地方A、B一定都要是1,反之亦然,且A,B中的1要能上下左右直接连通。注意:C的最外一圈都是0.刚看题的时候想太复杂了,以为是找什么最小的连通块(?),实际上直接构造即可。题解:用C初始化A、B,然后按照题目给的样例构造。可以使得:A原创 2022-05-05 20:18:16 · 409 阅读 · 0 评论 -
2020浙江省赛 A - AD 2020 打表+前缀和
原题题意:给出两个日期,求这两个日期之间有202这个字符串的天的个数。题解:打表+前缀和。ps:稍微计算一下,打表的话会计算7e3 x 10 x 30=2e6次,刚好可以。注意:要判断闰年。#include<bits/stdc++.h>using namespace std;#define ll long long #define fir(i,a,n) for(int i=a;i<=n;i++)const int N=1e5+10;int n;/*202x xx x原创 2022-05-04 17:08:44 · 441 阅读 · 0 评论 -
【CF】G - 鸡哥的雕像 前缀积后缀积
原题输入1:32021 7 11输出1:77 22231 14147输入2:4114 514 1919 810输出2:798956460 177200460 47462760 112445724看完代码就懂了。#include<bits/stdc++.h>using namespace std;#define ll long long#define fir(i,a,n) for(int i=a;i<=n;i++)const int N=1e5+1原创 2022-05-03 17:16:32 · 393 阅读 · 0 评论 -
I - Fake Walsh Transform 找规律
一开始以为是思维题,想了很久…后来发现是一道规律题。当m不为1时,0-2m-1的所有数异或起来答案是0.如果n为0,则答案就是所有数的个数。否则就是所有数个数-1.当m为1时有特例:当n为1时,个数为2(0、1),当n为0时,个数为1(0).#include<bits/stdc++.h>using namespace std;#define ll long long#define fir(i,a,n) for(int i=a;i<=n;i++)const int N=..原创 2022-04-28 18:04:28 · 846 阅读 · 0 评论 -
2021GDCPC广东省大学生程序设计竞赛 A An Easy Problem 堆优化
题参考堆优化的做法太妙了。#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define pii pair<ll,ll>#define fi first#define se secondtypedef long long ll;const int N=1e6+10;ll n,m,k;priority_queue<pii>q原创 2022-03-22 20:48:16 · 340 阅读 · 0 评论 -
ABC200 C - Ringo‘s Favorite Numbers 2 思维+map计数
原题参考:live4m大佬的题解注意中途可能会爆int。能组成<a,b>使得b-a是200的倍数的,都满足a%200=b%200;#include<bits/stdc++.h>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define fir(i,a,n) for(int i=a;i<=n;i++)#define se secondconst int N=1e5+10;int原创 2022-03-21 19:28:10 · 329 阅读 · 0 评论 -
AcWing 1471. 牛奶工厂 树的性质:记录出度
AcWing 1471. 牛奶工厂天秀题解:AcWing 1471. 牛奶工厂,优秀的O(n)解法,真的很简洁!一开始自己做的时候傻傻DFS。后来发现可以这样:(引用和图都来自“天秀题解”)要用这种方法,我们先看到题目中的一句话:农夫约翰的牛奶加工厂内有N个加工站,编号为1…N,以及 N−1条通道,每条连接某两个加工站。关键是N-1条通道!那么要求出符合题意的点,这些有向边就一定会组成一棵树,而树根出度为0。接下来就简单了,对于每个点,我们都记录一下它的出度,然后循环一次。因为这是一棵树,所以原创 2022-03-17 19:50:45 · 525 阅读 · 0 评论 -
AcWing 3745. 牛的学术圈 I 理解题意+枚举答案(妙)
AcWing 3745. 牛的学术圈 I 原题参考题解:封禁用户大佬的题解:AcWing 3745. 牛的学术圈 I两种方法——1.二分;2.只要一个for和一个数组我的打卡枚举答案,找出第一个不符合题意的i,于是i-1就是答案。#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)const int N=1e5+10;int n,l;int a[N];//引原创 2022-03-17 16:38:42 · 428 阅读 · 0 评论 -
【博弈论】Nim游戏:台阶、集合、拆分(AcWing)
AcWing 891. Nim游戏参考:AcWing 891. Nim游戏AcWing 891. Nim游戏题解:文字部分来自这里异或的含义公平组合游戏若一个游戏满足:由两名玩家交替行动在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关不能行动的玩家判负则称该游戏为一个公平组合游戏。尼姆游戏(NIM)属于公平组合游戏,但常见的棋类游戏,比如围棋就不是公平组合游戏,因为围棋交战双方分别只能落黑子和白子,胜负判定也比较负责,不满足条件2和3。必胜状态和必败状态在解决这个问原创 2022-03-16 19:54:30 · 4921 阅读 · 0 评论 -
求整数n的最小质因子出现次数 打表
打表原创 2022-03-16 16:56:42 · 1394 阅读 · 0 评论 -
AcWing 1738. 蹄球 拓扑排序
AcWing 1738. 蹄球打卡参考竟然是拓扑排序,没想到哇。有入度的点不会做起点。#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)const int N=1e2+10;int n,ans;int a[N],b[N],rd[N];//入度 int v[N];void dfs(int u){ v[u]=1; if(!v[b[u]]) dfs(b原创 2022-03-14 15:32:31 · 175 阅读 · 0 评论 -
【PTA】二叉树题总结
完全二叉搜索树(中序遍历+存位置)一个无重复的非负整数序列,必定对应唯一的一棵形状为完全二叉树的二叉搜索树。本题就要求你输出这棵树的层序遍历序列。输入格式:首先第一行给出一个正整数 N(≤1000),随后第二行给出 N 个不重复的非负整数。数字间以空格分隔,所有数字不超过 2000。输出格式:在一行中输出这棵树的层序遍历序列。数字间以 1 个空格分隔,行首尾不得有多余空格。输入样例:101 2 3 4 5 6 7 8 9 0输出样例:6 3 8 1 5 7 9 0 2 4代码:#原创 2022-03-12 18:17:21 · 359 阅读 · 0 评论 -
AcWing 1875. 贝茜的报复 枚举+dfs
AcWing 1875. 贝茜的报复 打卡这题的dfs太妙了。#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)typedef long long ll;const int N=1e5+10;map<char,int>ji,ou,mp;//存某个字母变量的奇偶个数//mp存枚举的是奇数还是偶数 1代表奇数 2代表偶数 int n;strin原创 2022-03-10 19:43:27 · 183 阅读 · 0 评论 -
AcWing 1884. COW 经典dp
AcWing 1884. COW打卡#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;ll ans;int n;string a;int c,o,w;//o代表前面有几个co int main(){ cin>>n>>a; for(int i=0;a[i];i++) { if(a[i]=='C') c++; else if(原创 2022-03-10 17:59:44 · 144 阅读 · 0 评论 -
AcWing 1929. 镜子田地 dfs+异或+反证
AcWing 1929. 镜子田地打卡参考和讲解:AcWing 1929. 镜子田地 -> 图示方向改变AcWing 1929. 镜子田地 简洁代码 + 证明#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define mem(a,x) memset(a,x,sizeof(a));#define pb push_back#define INF 0原创 2022-03-10 15:38:27 · 189 阅读 · 0 评论 -
AcWing 1996. 打乱字母 对string的排序
AcWing 1996. 打乱字母参考:题解对string排序:string s;cin>>s; sort(s.begin(),s.end());u.pb(s);a.pb(s);//从小到大:使bac->abc reverse(s.begin(),s.end());d.pb(s);//从大到小:使bac->cba 注意:一个字符串的正序肯定比它的倒序前(倒序排列中),所以不用删除其倒序,因为不会对答案有影响。同理,它的倒序肯定在正序后(正序排列中),因此-1原创 2022-03-07 16:34:13 · 683 阅读 · 0 评论 -
AcWing 2014. 岛 差分+map离散化
题目链接参考:AcWing 2014. 岛(离散化+差分)c++最短代码,同4007题(含对差分算法的深入探究)AcWing 2014. 岛深入剖析差分的本质探究差分解法的由来 AcWing 101. 最高的牛本题要求最大的岛的数量。思路:对于每一对a[i-1],a[i],如果有a[i-1]<a[i],那么当水<a[i-1]时,是一个岛;当水>a[i-1]&&水<a[i]时,还是一个岛;当水>a[i]时,是0个岛。也就是说,当水>=a[-原创 2022-03-07 15:00:24 · 445 阅读 · 0 评论 -
【PTA】团体程序设计天梯赛-练习集 L2题目总结(完)
L2模拟题L2-002 链表去重(链表模拟)L2-002 链表去重用两个数组分别表示键值和下一个结点来模拟链表。注意可能存在无重复键值的绝对值的情况。#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define pb push_back#define ll long long#define mem(a,x) memset(a,x,sizeof(a))原创 2022-03-05 16:45:04 · 4815 阅读 · 3 评论 -
【PTA】 7-1 矩阵链相乘问题 (20 分)
输入:530 35 15 5 10 20输出:11875代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;#define pb push_back#define fi first#define se second#define mem(a,x) memset(a,x,sizeof(a));#define db dou.原创 2021-11-28 14:44:28 · 946 阅读 · 0 评论 -
AtCoder Beginner Contest 219 D - Strange Lunchbox
D问当A至少x个,B至少y个的最小方案数。定义dp[i][j]位A有i个,B有j个的最小方案数。然后枚举。因为问的是至少,所以要遍历A从x,B从y开始到300的所有答案。因为可能没有刚好到达x y(如样例1).#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;#define pb push_back#define fi first#de原创 2021-09-28 19:11:24 · 173 阅读 · 0 评论 -
【LPOJ】C 北京你好 dp
做了下上学期期中考试题,乍一看以为是贪心,wa了贼多发后发现是dp。注意:一个乘客下车后如果该站点没有人上车,则结束,说明最多的人数都要首尾相连!感谢小王同学指点迷津。#include<bits/stdc++.h>using namespace std;//======================const int N=1e3+10;int dp[N];//dp[i]表示以i结尾的最多的人数 int n,m;int ans=-0x3f3f3f3f;int main()..原创 2021-11-02 19:20:06 · 164 阅读 · 0 评论 -
AcWing 1293. 夏洛克和他的女朋友 二分图
题是一个二分图染色。质数不是质数的质因子,因为质数不会有因子,所以质数全是颜色1合数不是合数的质因子,因为合数不“质”,所以合数全都是颜色2n小于3的时候只有1种颜色,其他都是2种颜色。#include<bits/stdc++.h>using namespace std;#define mem(a,x) memset(a,x,sizeof(a));//======================const int N=1e5+10;int cnt=0;int pri[N],原创 2021-10-25 20:05:11 · 140 阅读 · 0 评论 -
AcWing 196. 质数距离 二次筛法
题想求231-1范围的质数距离,那么我们可以求5e4范围中的所有质数,然后这些质数可以组成2~231-1中的所有合数。打表求5e4范围中的质数,用类似埃氏筛的方法把l到r的所有质数筛出来,由于差值不会超过 106,可以O(n)扫描一遍求距离。此题得解。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define mem(a,x) memset(a,x,sizeof(a));//============原创 2021-10-25 21:46:47 · 195 阅读 · 0 评论 -
AcWing 1292. 哥德巴赫猜想 线性筛+二分查找
题线性筛代码:const int N=1e6+10;int pri[N],v[N],pri2[N];int cnt;void Getpri()//线性筛 { mem(v,0); cnt=0; for(int i=2;i<=1e6;i++) { if(v[i]==0)//没被筛到说明是质数 { v[i]=i; pri[cnt++]=i; } for(int j=0;j<cnt;j++) { if(pri[j]>v[i]||pri[j原创 2021-10-25 18:59:38 · 162 阅读 · 0 评论 -
HDU 6288 缺失的数据范围 大数范围+二分
https://acm.dingbacode.com/showproblem.php?pid=6288做题的时候看到它狂喜,裸的二分也!稳了!然后爆LL了。哈哈!用unsigned long long 和__int128才能过。ps:二分范围是从0到1e18 ;而且二分要 l=mid+1,ans=mid;r=mid; 不然会T。我粗略的理解是如果l=mid,r=mid-1,要返回的会慢一些(?),或许是有的数据会死循环…?ps:防止爆了,mid=l+(r-l)/2来代替mid=(l+r)/2;原创 2021-10-10 21:59:53 · 102 阅读 · 0 评论 -
【PTA】团体程序设计天梯赛-练习集 25分的题
L2-001 紧急救援题题意:求最短路的条数,和其中一条经过人数最多的最短路。最后输出后者经过的城市编号。题解:先用dijkstra求出从起点开始到所有点的最短路,这要就得知从起点到终点的最短路。接下来找最短路的条数:如果dist[j]=dist[i]+g[i][j],说明这条路在最短路上。每次保存人数和经过的城市编号,如果当前人数大于已经保存的人数则更新。简单来说就是一个dijkstra+dfs。#include<bits/stdc++.h>using namespace原创 2022-02-19 00:30:00 · 1698 阅读 · 0 评论 -
AcWing 2058. 笨拙的手指 枚举+哈希表+秦九韶算法
题代码关键:枚举。用unordered_set哈希表来表示某个数字是否出现过。insert插入,count返回集合内某个数字出现的次数。将b进制的string a转化为十进制的方式:秦九韶算法。二进制的转换:0变1,1变0,对应到ASCII码就是48->49,49->48,就是亦或操作^。三进制的转换:见代码,很巧妙。代码:#include <iostream>#include <cstring>#include <algorithm>原创 2022-01-25 16:56:22 · 420 阅读 · 0 评论 -
【好题】第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 F-第二大数 思维
题求各个范围的第二大数。举个例子:49 6 4 5 6 4 4 6 5 6第二大数分别是:6 4 4 6 5 6 我们的做法就是按照题目顺序,i从1开始,j从i+1开始,每次记录当前最大数和第二大数,对于每次新出现的数a[j],如果它大于第二大数,那它就是第二大数;如果它大于最大数,那第二大数就变成原先的最大数,当前最大数就是a[j]。(如果它不满足以上条件就不管了)(j=i+1时最大数就是max(a[i],a[j]),第二大数就是min(a[i],a[j])其实还有另一原创 2022-01-17 15:22:40 · 290 阅读 · 0 评论 -
【好题】第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 H-特征值 前缀和+高精度模拟
题比赛的时候,一看题:害!高精度模拟!冲!然后就T了。做题之前要算一下时间复杂度,来判断自己的方法是否合理,不然会浪费大量的时间。这题的数据范围:500000如果要高精度加法,数字长度是500000,所以要加500000次,每次加是按位数加,还要乘以500000,总的时间复杂度是500000*500000=2.5x1011 绝对会TLE所以要思考一下别的方法。经过@满满满V 的提醒,我们可以这样看这道题的加法:1225 122 12+ 1————1360很容易可以看出,每原创 2022-01-17 13:54:15 · 320 阅读 · 0 评论 -
【好题】第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 G-Num 思维+推公式
题推公式:a*b+a+b=a*(b+1)+b=a*(b+1)+b+1-1=(a+1)*(b+1)-1因此,令n++,若n为质数,说明没有一个(a+1)*(b+1)可以组成它,就输出No。代码:#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define mem(a,x) memset(a,x,sizeof(a));typedef long long原创 2022-01-17 13:34:52 · 403 阅读 · 0 评论 -
【图论算法】零基础最小生成树学习与总结
参考资料和引用来源数据结构–最小生成树详解AcWing 858. Prim算法求最小生成树:图解+详细代码注释(带上了保存路径)AcWing 858. Prim算法求最小生成树 的视频AcWing 859. Kruskal算法求最小生成树什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然原创 2022-01-14 20:25:34 · 549 阅读 · 0 评论 -
【动态规划算法】零基础区间DP自学笔记
一个初学者的笔记。区间dp的两种写法迭代式&记忆化搜索迭代式://第一维循环区间长度 第二维循环左端点(范围是右端点<=n) for(int len=1;len<=n;len++) for(int L=1;L+len-1<=n;L++) R=L+len-1;//求右端点 或:来自for(int len = 1;len<=n;len++){//枚举长度 for(int j = 1;j+len<=n+1;j++){//枚举起点,end原创 2022-01-14 15:15:12 · 282 阅读 · 0 评论 -
【DFS】题目总结
DFS顺序很重要!模板题acw-排列数字842. 排列数字#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=10;int n;int v[N],path[N];void dfs(int u){ if(u>n) { for(int i=1;i<=n;i++) { cout<<path[i]; if(i!=n) cout<&原创 2021-09-12 13:22:55 · 330 阅读 · 0 评论 -
【BFS】题目总结与笔记
简单矩阵距离题第一次到的肯定是最min的#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;#define pb push_back#define fi first#define se secondconst int N=1005;char a[N][N];int b[N][N];int n,m;queue<pii>原创 2022-01-11 14:31:33 · 143 阅读 · 0 评论 -
poj 3278 Catch That Cow bfs+注意范围
题错了好几次,分别是:RE 运行时错误,因为访问了下标为-1的数组。定位在搜索-1方向的条件。MLE 内存超限,q.push没有筛选,重复的都放进去就会MLEWA 忘记多组样例了。注意,为了防止2的数字太大,要有if(temp.n<=k&&v[temp.n2]==0) 。#include<iostream>#include<string.h>#include<queue>using namespace std;typedef lo原创 2021-12-09 17:19:37 · 259 阅读 · 0 评论