![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题
算法题
楠风丶北枝
xs
展开
-
Fussy Sakamoto 思维+树状数组
Fussy Sakamoto牛客 链接:https://ac.nowcoder.com/acm/problem/23931来源:牛客网For each triangle count how many of the other N-1 points it contains.原创 2023-02-03 10:19:17 · 240 阅读 · 0 评论 -
HDU 1698 just a hook 线段树 模板题
HDU 1698a数组用来标记变化#include<iostream>#include<math.h>#include<algorithm>using namespace std;const int maxn = 1e5+10 ;const int INF = 0x3f3f3f3f;int sum[maxn*4],a[maxn*4],k;int t,n,m;void push_up(int x){//左儿子+右儿子 更新父亲节点 sum[x] = s原创 2020-08-26 21:01:08 · 113 阅读 · 0 评论 -
A Simple Problem with Integers POJ 3486线段树模板题
You have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.InputThe first lin.原创 2020-08-27 09:58:00 · 74 阅读 · 1 评论 -
Codeforces Round #648 C Rotation Matching
思维题,位置差#include<bits/stdc++.h>using namespace std;int main(){ int n,x; cin>>n; int a[200005],b[200005],c[200005]={0}; for(int i=0;i<n;i++){ cin>>x; a[x]=i; } for(int i=0;i<n;i++){ cin>>x; b[x]=i; } for(int i原创 2020-06-12 11:27:04 · 110 阅读 · 0 评论 -
Educational Codeforces Round 122 (Rated for Div. 2)
http://codeforces.com/contest/1633题目大意: 给一个数 从这个数的个位动手 让数能被7整除#include<bits/stdc++.h>using namespace std;int main(){ int t;cin>>t; while(t--){ int n; cin>>n; if(n%7==0) cout<<n<<endl; else{ n/=10; n*=10;原创 2022-03-11 11:17:33 · 80 阅读 · 1 评论 -
Codeforces Round #648 D Solve The Maze
预处理加爆搜题目链接题目大意是给一张N*M的地图,地图上有墙、空地、好人和坏人;**‘.’是空地;‘#’是墙;‘G’是好人;‘B’是坏人;出口是(N,M)且出口保证是空地,我们要让好人出地图,把所有坏人堵起来注意是任意一个坏人都不可以到(N,M),否则输出“NO”还有一点是好人和坏人是无意单位碰撞的所以样例2 3#.GBG.这个是“NO”思路是先把地图扫进去,然后再预处理一下,找到每一个坏人,把它四周变成墙,这里有个提醒的点是如果两个坏人挨在一起,是不能把旁边的坏人变成墙的,因原创 2020-06-12 11:20:36 · 208 阅读 · 0 评论 -
Codeforces Round #696 (Div. 2) A-C
这场打得很烂A. Puzzle From the Future思路很简单a、b都为0、1组成的字符串,然后将他们简单相加(1+1=2,0+1=1)得到的那串字符串经过处理,重复的会被覆盖 02200会变成020题目要使结果最可能最大,给出字符串a求字符串b思路:使当前位置尽可能大且不与前一位相同,建立一个now,表示前一位的数字,如果前一位是和是2 则这一位就和凑1,反之相反。比如如果前一位的和是1且a为0,则b当前位只能为0;#include<bits/stdc++.h&原创 2021-01-22 10:27:14 · 126 阅读 · 2 评论 -
Codeforces Round #767 (Div. 2) A-C
A题意 有n个软件,第i个软件运行时需要消耗ai G内存(运行完不会消失),运行完可以获得额外的bi G内存,问可以达到的最大内存是多少方法 贪心#include<bits/stdc++.h>using namespace std;int main(){ int t; cin>>t; while(t--){ int n,m;cin>>n>>m; vector< pair <int, int> > v; int.原创 2022-02-09 13:12:48 · 240 阅读 · 0 评论 -
Codeforces Round #768 (Div. 2)
http://codeforces.com/contest/1631/problem/A思路 大的在一边,小的在一边,问题变成 大数组求最大的,小数组求最大的,然后相乘得结果#include<bits/stdc++.h>using namespace std;int a[100005],b[100005];int main(){ int t;cin>>t; while(t--){ int n;cin>>n; int ans=-1,anss=-1;原创 2022-02-27 10:53:43 · 136 阅读 · 0 评论 -
cf#644 F Spy-string
You are given n strings a1,a2,…,an: all of them have the same length m. The strings consist of lowercase English letters.Find any string s of length m such that each of the given n strings differs from s in at most one position. Formally, for each given s原创 2020-05-28 08:27:26 · 175 阅读 · 0 评论 -
E - Permutation by Sum Codeforces Round #713 (Div. 3)
题意: 从1~N的序列中挑选 ( r - l +1 ) 个数 和为 s不满足 输出-1 满足 就输出 任意符合的数序列s是可以构造出来的 从最小的序列从 1 ~ ( r - l +1) 开始 不断加1例如 5 2 3 5 就 从 1 2 出发变成1 3 s- - ; (逐个变大 要满足不重复再变成2 3 s- -;(这时的s==0 退出即可贴代码(可能写的麻烦了一点)#include<bits/stdc++.h>using namespace std;int原创 2021-04-11 08:51:57 · 202 阅读 · 0 评论 -
直线---科林明伦杯H题
大数乘法———第一次碰到,记录一下https://ac.nowcoder.com/acm/contest/5758/H#include<bits/stdc++.h>using namespace std; int main(){ int t; cin>>t; long long n; while(t--){ int a[100]={},b[100]={},c[100]={}; int aa[100]={},bb原创 2020-06-01 15:37:07 · 178 阅读 · 1 评论 -
三角形——科林明伦杯F题
2的64次-1 long long 存不了 所以要用 unsigned long longhttps://ac.nowcoder.com/acm/contest/5758/F这里有个大部分类型的范围#include<bits/stdc++.h>using namespace std;int main(){ unsigned long long a[105]={}; a[1]=1; a[2]=1; for(int i=3;i<=100;i++){ a[i]=a[i-1原创 2020-06-01 15:44:24 · 483 阅读 · 3 评论 -
最大值——科林明伦杯J题
这是可以说是暴力搜索还第一次知道ac串这题比赛的时候没写出来,因为不敢写暴力思路(自己太菜了)题目描述有一个字符串s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。请问给出一个字符串他的ac串最大长度为多少输入描述:输入数据第一行是t,表示数据的组数,接下来每组数据输入一个字符串s(t<=10,s<=1e5)示例1代码#include<bits/stdc++.h>using namespace std;int main(){原创 2020-06-01 15:56:37 · 239 阅读 · 1 评论 -
贪心专项练习LeetCode
贪心专项练习LeetCode原创 2022-10-20 10:38:20 · 164 阅读 · 0 评论 -
回溯专项练习LeetCode
回溯专项练习LeetCode原创 2022-10-15 10:45:30 · 76 阅读 · 0 评论 -
二叉树专项训练LeetCode
LeetCode专项练习原创 2022-10-09 10:03:18 · 206 阅读 · 0 评论 -
栈与队列专项练习
栈与队列专项练习原创 2022-10-03 09:48:46 · 98 阅读 · 0 评论 -
字符串专项练习 LeetCode
字符串专项练习 LeetCode KMP原创 2022-10-02 09:51:16 · 98 阅读 · 0 评论 -
哈希表专项练习 LeetCode
哈希表专项练习原创 2022-09-30 12:37:25 · 175 阅读 · 0 评论 -
链表专项练习 LeetCode
链表专项练习原创 2022-09-28 08:59:43 · 166 阅读 · 0 评论 -
数组专项练习 LeetCode
LeetCode 数组练习原创 2022-09-27 10:10:03 · 214 阅读 · 0 评论 -
01背包-完全背包-多重背包-多重背包二进制优化-分组背包
普通01背包 一维数组解#include<bits/stdc++.h>using namespace std;int main(){ int n,m; cin>>n>>m; int a[1005],w[1005],dp[1005]={}; for(int i=1;i<=n;i++){ cin>>a[i]>>w[i]; } for(int i=1;i<=n;i++){ for(int j = m;j>=..原创 2022-04-08 16:36:07 · 2564 阅读 · 0 评论 -
【十一届蓝桥杯】子串分值和
#include<iostream>#include<cstring>using namespace std;typedef long long ll;int main(){ string s; cin>>s; ll total=0; int a[26]; memset(a,-1,sizeof(a)); a[s[0]-'a']=0; total=s.size(); for(int i=1;i<s.size();i++){ total.原创 2022-04-04 15:18:22 · 306 阅读 · 0 评论 -
【十一届蓝桥杯】数字三角形
#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int dp[105][105]={}; int mp[105][105]={}; for(int i =1 ;i <= n; i++){ for(int j =1 ;j<=i;j++){ cin>>dp[i][j]; } } int ans=0; for(int i = 2; i&l..原创 2022-04-04 10:51:23 · 122 阅读 · 0 评论 -
【十一届蓝桥杯】整数拼接
题目链接**根据题意可推出,A与B拼接可以推出等式 A + 10x + B,题目可以翻译成是求A + 10^x + B % K ==0的个数。首先我们肯定不能去枚举两重循环,这样必定会超时, 我们通过观察等式A + 10x + B % K ==0进行等价变形,变成(A + 10^x) % K = - B % K,并且B与x正相关,则我们可以用一个哈希表存起来A +10x,用空间换时间,那么我们的两重循环就可以换成一个只枚举A,调用哈希只需要O(1)的时间,到现在看来题目就迎刃而解了,本题时间复杂度原创 2022-04-04 10:13:39 · 385 阅读 · 0 评论 -
【十一届蓝桥杯】字串分值
题目链接记录每个位置所对应的字符的之前和之后出现的位置,两者相乘则是该位置的字符的贡献,依次相加即可#include <iostream>#include <cstring>#include <cmath>using namespace std;const int N=100005;long long int R[N];long long int L[N];long long int vis[30];char str[N];int main(){原创 2022-04-03 14:37:17 · 324 阅读 · 0 评论 -
【十二届蓝桥杯】括号序列
习题链接dp[i][j]表示序列前i个括号中左括号比右括号多j个方案数。需要记住的是我们只会往括号序列中插入左括号,因为我们判断一个序列不合法当且仅当此时左括号数目小于右括号数目。需要注意的一点是当j等于0时需要特殊处理一下,因为j-1=-1,所以dp[i][0]=dp[i-1][1]+dp[i-1][0]#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=5005;int f[N原创 2022-04-03 10:27:16 · 1004 阅读 · 0 评论 -
【十二届蓝桥杯】左孩右兄
题目链接dp思路#include<bits/stdc++.h>using namespace std;const int maxn = 1000005;typedef long long ll;ll fa[maxn],dp[maxn],deep[maxn];int main(){ int n;cin>>n; for(int i = 2 ;i <= n; i++){ cin>>fa[i]; if(fa[i]){ deep[fa[i]原创 2022-04-02 09:14:21 · 112 阅读 · 0 评论 -
【十二届蓝桥杯】异或数列
1. ans==0 平局 2. ans!=0 { num[i]表示目前最高位1的个数 num[i] == 1 说明最高位只有一个 Alice先手 赢 再判断num[i]%2 ==0 偶数 不做处理 else 再判断{ n是偶数,1是奇数,那么0是奇数,只要后手把0先选完,后手就获得最后一个1的支配权,后手胜 同理可得,n是奇数,0是偶数,先手把0先选完,先手获得最后一个1的支配权,先手胜 } }..原创 2022-04-02 08:32:12 · 544 阅读 · 0 评论 -
【十二届蓝桥杯】砝码称重
状态转移方程max( dp[i - 1][j] , max( dp[i - 1][j + w[i]] , dp[i - 1][abs(j - w[i])]));#include<bits/stdc++.h>using namespace std;int dp[105][100000];int n, w[105], sum, ans;int main(){ cin>>n; for(int i = 1; i >w[i]; sum +.原创 2022-04-01 21:53:47 · 353 阅读 · 0 评论 -
二分图的最大匹配
选择边数最大的子图称为最大匹配问题#include<bits/stdc++.h>using namespace std;const int N = 510,M = 100010;int n1,n2,m;int now[M],nex[M],to[M],idx;int vis[N];int match[N];void add(int x,int y){ to[idx] = y; nex[idx] = now[x]; now[x] = idx++; }int find(原创 2022-03-29 09:51:48 · 278 阅读 · 0 评论 -
染色法判定二分图
染色二分图简单来说 就是相邻两点之间 颜色不同这里取 vis 0表示未染色 1表示黑 2表示白#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;const int M = 2e5 + 10;int to[M],ne[M],now[M],vis[N];int n,m,idx;void add(int x,int y){ to[idx] = y; ne[idx] = now[x]; no原创 2022-03-27 15:39:10 · 324 阅读 · 0 评论 -
Kruskal算法求最小生成树
这个破站视频讲的Kruskal通俗易懂https://www.bilibili.com/video/BV1Eb41177d1/#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;const int M = 2e5 + 10;struct node{ int u,v,w;}tree[M];int n,m;int fa[N];bool cmp(node x, node y){ return x...原创 2022-03-25 16:35:30 · 361 阅读 · 0 评论 -
Prim算法求最小生成树
给定一个无向图,在图中选择若干条边把图的所有节点连起来。要求边长之和最小。在图论中,叫做求最小生成树。prim 算法采用的是一种贪心的策略。每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小。#include<bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;const int N = 505;const int M = 1e5 + 10;typ原创 2022-03-25 16:10:06 · 771 阅读 · 0 评论 -
Floyd求最短路
多源考虑floyd 还要考虑数据范围#include <bits/stdc++.h>using namespace std;const int N = 210, M = 2e+10, INF = 1e9;int n, m, k, x, y, z;int d[N][N];void floyd() { for(int k = 1; k <= n; k++) for(int i = 1; i <= n; i++) for(in.原创 2022-03-24 16:31:36 · 116 阅读 · 0 评论 -
最短路问题总结
Dijkstra-朴素O(n^2)初始化距离数组, dist[1] = 0, dist[i] = inf;for n次循环 每次循环确定一个min加入S集合中,n次之后就得出所有的最短距离将不在S中dist_min的点->tt->S加入最短路集合用t更新到其他点的距离Dijkstra-堆优化O(mlogm)利用邻接表,优先队列在priority_queue[HTML_REMOVED],greater[HTML_REMOVED] > heap;中将返回堆顶利用堆原创 2022-03-24 16:29:39 · 79 阅读 · 0 评论 -
spfa判断负环
求负环的常用方法,基于SPFA方法 1:统计每个点入队的次数,如果某个点入队n次,则说明存在负环方法 2:统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则也说明存在环在SPFA的基础上 加一个cnt数组来记录当前 x 点到 虚拟源点 最短路的边数,初始每个点到虚拟源点的距离为0,只要他能再走n步,即 cnt[x] >= n ,则表示该图中一定存在负环,由于从虚拟源点到x至少经过n条边时,则说明图中至少有n + 1个点,表示一定有点是重复使用C++代码原创 2022-03-24 11:13:03 · 2017 阅读 · 0 评论 -
spfa求最短路
Bellman_ford算法会遍历所有的边,但是有很多的边遍历了其实没有什么意义,我们只用遍历那些到源点距离变小的点所连接的边即可,只有当一个点的前驱结点更新了,该节点才会得到更新;因此考虑到这一点,我们将创建一个队列每一次加入距离被更新的结点。注意1、vis并不是标记一下是否使用 而是标记是否可以再次压入queue。2、跟堆优化Dijstra很像,但是完全不同。3、Bellman_ford算法最后是用 dis[n] > inf/2 来判断而spfa是用 dis[n] == inf 判断 .原创 2022-03-23 16:09:24 · 499 阅读 · 1 评论 -
有边数限制且存在负权值的最短路
dijstra算法基于贪心思想,当有负权边时,局部最优不一定是全局最优,所以采用bellman - ford算法Bellman - ford 算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在 n-1 次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。(通俗的来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过循环 n-1 次操作,若图中不存在负环,则 1 号点原创 2022-03-23 15:02:33 · 1660 阅读 · 7 评论