11 2023 档案
摘要:从一个点开始,每次都找与这个点最近的点,近队列,直到队列为空,是关于点的算法,时间复杂度为nlog(n) 模板: #define int long long using namespace std; const int N=9e5+10; int n,m; vector<pair<int,int>>
阅读全文
摘要:平衡字符串的性质 将左括号看出1,右括号看成-1 (1)最后加起来是0 (2)中间一直要是正数 所以代码如下 using namespace std; int n; int dx[2]={1,-1}; int ans=0; void dfs(int cur,int x){ if(x<0)return
阅读全文
摘要:next_permutation全排列公式 数据不大,直接暴力全排列模拟出数据即可 using namespace std; int p[9]={1,2,3,4,5,6,7,8,9}; int main(){ int a,b,c; cin>>a>>b>>c; int cnt=0; do{ int x
阅读全文
摘要:dfs深搜就行,搜到就结束,然后用一个数组来记录路径,重点是回溯 using namespace std; int sum=0; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int vis[20][20]; char mp[20][20]; char an
阅读全文
摘要:每次都找最小的边,一直到n-1个边为止,是关于边的算法,时间复杂度为mlog(m) using namespace std; const int N=5e5+10; struct edge{ int u,v,w; }edge[N]; int fa[N]; int ans=0; int cnt=0;
阅读全文
摘要:B - Minimize Abs 1 思维题 题意:给定一个范围,你选择一个数,使得 思路:如果A[i]在l,r中间,那么直接打印就行,如果不是就打印就近的 using namespace std; void solve(){ int n,l,r; cin>>n>>l>>r; for(int i=1
阅读全文
摘要:2023 11 27 A. Cover in Water 题意是:有一片坑,可以进行两个操作,一个是在一个坑里倒水,一个是把水到在另一个坑里,如果一个坑的左右两边都有水,那么这个坑也会有水 思路:想想发现,只要有三个连续的坑,那么所有的坑都可以被填上,如果没有就只能一个一个的填。 using nam
阅读全文
摘要:2023 11 27 A. Jagged Swaps 题意是:给你一个数组进行无数次的操作 问你能不能单调 思路:通过观察发现进行操作大的一定会被放在后面,所以一定会单调,但是操作是从2开始的,所以下表1的地方一定要是1 using namespace std; int a[20]; void so
阅读全文
摘要:题意是:给定一个长度为 N 的数列,和 M 次询问,求出每一次询问的区间内数字的最大值。 ST表的基本功能是对区间进行查询,其核心使用的是倍增的思想 f[i][k]:意思是从第i个数开始往后2^k个数 f[i][k]=max(f[i][k-1],f[i+2^k-1][k-1]) 求【l,r】区间 m
阅读全文
摘要:题意是: 给你一个迷宫,起点为S,终点为T,.表示空格,#表示障碍物无法通过,你每次可以从当前位置上下左右移动(不能出界或者撞到障碍物上)你需要找出从起点到终点的最少步数,如果不存在解,输出-1。 BFS的练手题 using namespace std; int sx,sy,ex,ey; int n
阅读全文
摘要:BFS 训练的好题 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到
阅读全文
摘要:A. Line Trip 题意是:有n个加油点,人要来回两趟,问你最少要多少油? using namespace std; int a[100]; void solve(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; int ans=a[
阅读全文
摘要:奇怪的电梯 题目背景 感谢 @yummy 提供的一些数据。 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 层楼( )上有一个数字 ( )。电梯只有四个按钮:
阅读全文
摘要:[NOIP2002 普及组] 过河卒 题目描述 棋盘上 点有一个过河卒,需要走到目标 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,
阅读全文
摘要:单点修改+区间查询 I Hate It 题目背景 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 输入格式 第
阅读全文
摘要:于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人。 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON900)。 题目描述 这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞
阅读全文
摘要:【模板】单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢? ; ;
阅读全文
摘要:C - Count xxx 题意是:给你一个字符串,求出字符串里面相同字母的子串数量 思路:用map映射即可,取每个字母的最大长度,然后加起来 using namespace std; int main(){ int n; string s; cin>>n>>s; map<char,int>mp;
阅读全文
摘要:最长上升子序列 题目描述 这是一个简单的动规板子题。 给出一个由 个不超过 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。 最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的。 输入格式 第一行,一个整数 \
阅读全文
摘要:一中校运会之百米跑 题目背景 在一大堆秀恩爱的 ** 之中,来不及秀恩爱的苏大学神踏着坚定(?)的步伐走向了 米跑的起点。这时苏大学神发现,百米赛跑的参赛同学实在是太多了,连体育老师也忙不过来。这时体育老师发现了身为体育委员的苏大学神,便来找他帮忙。 可是苏大学神需要热身,不然跑到一
阅读全文
摘要:B - 11/11 题意是:有n个月份,要你计算出月份上的每个数位与对应月份中的每个日期数位一致的日期和 直接模拟即可 using namespace std; int a[200]; int p; bool check(int x){ p=x%10; x/=10; while(x){ int q=
阅读全文
摘要:题目描述 给定一个 方格的迷宫,迷宫里有 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。 输入格式 第一行为三个正
阅读全文
摘要:其中1有点特殊所以就直接从2开始了 #include<bits/stdc++.h> using namespace std; int w[2000],f[2000]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ w[i]++; for(int
阅读全文
摘要:一个数可以被无限次的选,所以是完全背包,然后预处理一下就好啦 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int f[N]; int main(){ memset(f,0x3f,sizeof f); f[0]=0;
阅读全文
摘要:还是选与不选的问题,但是每个背包可以无限次选,所以这是个完全背包! #include<bits/stdc++.h> using namespace std; const int N=2e4+10; int f[N],w[N],t[N]; int main(){ int n,m; cin>>n>>m;
阅读全文
摘要:二维01背包的裸题 #include<bits/stdc++.h> using namespace std; int w[200],a[200],b[200]; int f[2000][2000]; int main(){ int n,x,y; cin>>n>>x>>y; for(int i=1;i
阅读全文
摘要:这个题目挺有意思的,有点贪心思想,就是要把更多的时间留给刷题,所以要把01背包改成取min,所以要把dp[i]先预处理成0x3f无穷大,然后把刷题时间排个序,这要就是最佳的答案。 #include<bits/stdc++.h> using namespace std; int a[20],b[20]
阅读全文
摘要:题目思路与解法都与 NASA的食物计划 https://www.luogu.com.cn/problem/P1507 类似 是二维01背包 #include<bits/stdc++.h> using namespace std; int f[500][500]; int a[110],b[110];
阅读全文
摘要:还是选与不选的问题并且只能选一次,所以是01背包,但是这个题目是个二维的01背包,因为它必须要满足两个条件,这个是满足体积的情况下,一个是满足质量的情况下 #include<bits/stdc++.h> using namespace std; const int N=500; int f[N][N
阅读全文
摘要:题目与P2639十分相似 #include<bits/stdc++.h> using namespace std; const int N=5e4+10; int f[N],t[5010]; int main(){ int T,n; cin>>T>>n; for(int i=1;i<=n;i++){
阅读全文
摘要:大概就是在不超过容量的情况下,问你最多能吃多少 是吃与不吃,选与不选的问题,所以是01背包,但是是变式 #include<bits/stdc++.h> using namespace std; const int N=5e4; int f[N],t[1000]; int main(){ int T,
阅读全文
摘要:所以这是一个01背包的裸题,每个物品选与不选 dp[i][j] 在前面i个物品选择,在不超过j的前提先所能选到的最大价值 公式就出来了 dp[i][j] = max(dp[i-1][j],dp[i-1][j-t[i]]+w[i]) 这是01背包的递推公式 注意的是,该公式还可以优化,因为第i个是从第
阅读全文
摘要:A. Secret Sport 题意:A与B选手在下棋,规定下赢X把看作赢一局,一共赢Y把的那个是最后的赢家。 思路:因为不知道x,y到底是多少,n的范围是到20,所以只需要枚举x即可,时间复杂度不高,注意的是,如果枚举结果是A赢,那么给定字符串的最后一个值一定是A,反之也是。 #include<b
阅读全文
摘要:A - ab 题意:判断字符串中是否有“ab”或者是“ba“ #include<bits/stdc++.h> using namespace std; void solve(){ int n; cin>>n; string s; cin>>s; if(s.find("ab")!=s.npos||s.
阅读全文
摘要:A. Treasure Chest 题目大意:人在0处,宝藏在x,钥匙在y,人最多拿宝箱z秒,问你最快多久开宝箱? 思路:如果说钥匙在宝箱的左边,那么人只需要往右走就是最佳答案,如果钥匙在宝箱的右边,那么人只需要拿的宝箱到最佳地点就行 #include<bits/stdc++.h> using na
阅读全文
摘要:A Sorting with Twos 题目大意:选择一个m,然后将1~2^m下表的数减一,可以操作无限次,问你能不能使数组单调递增 题目数据 8 5 1 2 3 4 5 5 6 5 3 4 4 9 6 5 5 7 5 6 6 8 7 4 4 3 2 1 6 2 2 4 5 3 2 8 1 3 17
阅读全文
摘要:大致解决的问题就是区间查询以及单点的修改 #include<bits/stdc++.h> #define int long long using namespace std; const int N=5e5+10; int a[N],tag[N<<2]; struct{ struct{ int l,
阅读全文
摘要:时间复杂度是O(nlog(n)) #define int long long using namespace std; const int N=1e5+10; int a[N],b[N],t[N]; int n; int lowbit(int x){ return x&-x; } bool cmp(
阅读全文