算法
ACM
xqx_Zi_yu
我与我周旋久,宁做我。
展开
-
LeetCode:访问所有节点的最短路径【847】
题目描述:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号。给你一个数组 graph 表示这个图。其中,graph[i] 是一个列表,由所有与节点 i 直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。示例 1:输入:[[1,2,3],[0],[0],[0]]输出:4解释:一个可能的路径为 [1,0,2,0,3]示例 2:输入:[[1],[0,2,4],[1,3,4],[2],[1,2.原创 2021-08-06 13:11:15 · 220 阅读 · 0 评论 -
题解——1713. 得到子序列的最少操作次数
题目:给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数.原创 2021-07-26 16:21:27 · 143 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数
题目链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。题解:cur=0,count = high*i;cur=1,count=high*i+low+1;cur>1,count=high*i+i需要对数字进行观察找规律。原创 2021-03-21 16:55:42 · 90 阅读 · 0 评论 -
子串分值和
试题H:子串分值和【问题描述】对于一个字符串 S,我们定义 S 的分值 f(S) 为 S 中出现的不同的字符个数。例如 f(”aba”)=2,f(”abc”)=3,f(”aaa”)=1。 现在给定一个字符串 S[0..n−1](长度为 n),请你计算对于所有 S 的非空 子串 S[i..j](0≤i≤j<n),f(S[i..j]) 的和是多少。【输入格式】输入一行包含一个由小写字母组成的字符串 S【输出格式】输出一个整数表示答案。【样例输入】ababc【原创 2021-03-10 21:55:52 · 1265 阅读 · 2 评论 -
错排公式——n封信放入n个信封,要求全部放错,共有多少种放法
错排递推公式:F(n)=(n-1)(F(n-1)+F(n-2));假设前三封信为a,b,c......;信封为A,B,C,.......;则a不能放进A,b不能放进B。若a放进B。b放进的情况分为两种:b放进A;b不放进A;若为第一种情况,则方案数为F(n-2),因为a放进B,b放进A满足条件,只需要考虑剩下的n-2个的情况若为第二种情况,则方案数为F(n-1),因为a放进B满足条件,而“b不能放进A”也就相当于原先的“b不能放进B”,需要考虑剩下的n-1个情况综上所述,信a可以与除原创 2021-03-10 21:09:15 · 8183 阅读 · 2 评论 -
牛客挑战赛45——C 友人 题解
题目链接:https://ac.nowcoder.com/acm/contest/8563/C题解:首先我们要知道z^k=z+k-2*(z&k);则只进行一次操作的代价:(r-l+1)*((z^k)+k-z)=2*(r-l+1)(k-z&k).对于k-z&k,我们要令其尽可能的小,则z要是k的较大的子集。那么我们枚举k的子集并保存下来,对其排序。然后我们枚举i=0->n,直到等差数列前i个数之和大于y对于每一个i,我们计算其前i个数之和s[i],为了满足整原创 2020-11-14 00:20:58 · 179 阅读 · 0 评论 -
数论——欧拉函数讲解及模板
欧拉函数:对于任意正整数N,把小于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,称作对N的欧拉函数,记作φ(n)。注:互质为两者没有除1外的公因数。规定φ(1)=1。欧拉函数的性质:1、若p为质数,则2、若a为质数且a|x,则2、若a与b互质,则求一个数的欧拉函数值:对一个数进行质因数分解:X=p1^k1*p2^k2...pn^kn由性质1可知φ(X)=p1^(k1-1)(p1-1)*p2^(k2-1)(p2-1)...pn^(kn-1)(pn-1)=X*(p原创 2020-11-13 14:34:41 · 361 阅读 · 1 评论 -
数论——快速乘(模板)
快速乘用途:计算a*b%mod,而且a*b大于long long。基本原理:计算机中计算加法的速度往往比乘法快多了,而快速乘就是通过乘法分配律将a*b分解成多项式相加。举个枣子:20*13,将13转化成二进制1101,则就是20*2^0+20*2^2+20*2^3。(类似于快速幂)void quick_mulitiply(ll a,ll b,ll mod) { ll res=0; while(b) { if(b&1) res=(res+a)%mod; a=(a+a)%mod原创 2020-11-13 00:30:00 · 299 阅读 · 0 评论 -
线性基整理
线形基(来自OI Wiki):线性基是向量空间的一组基,通常可以解决有关异或的一些题目。通俗一点的讲法就是由一个集合构造出来的另一个集合,它有以下几个性质: 线性基的元素能相互异或得到原集合的元素的所有相互异或得到的值。 线性基是满足性质 1 的最小的集合。 线性基没有异或和为 0 的子集。 线性基中每个元素的异或方案唯一,也就是说,线性基中不同的异或组合异或出的数都是不一样的。 线性基中每个元素的二进制最高位互不相同。 对于线性基的数组a[],a[原创 2020-11-10 15:34:50 · 149 阅读 · 0 评论 -
树上启发式合并模板(更好的暴力)
以CF600E Lomsat gelral为例#include <bits/stdc++.h>using namespace std;const int maxn=1e5+10;typedef long long ll;int a[maxn],sz[maxn],son[maxn];int n;vector<int> G[maxn];//遍历确定轻重儿子 void dfs(int u,int fa){ sz[u]=1; for(int i=0;i<G[u原创 2020-11-10 11:26:55 · 136 阅读 · 0 评论 -
cf 959F Mahmoud and Ehab and yet another xor task(线性基)
题意:对一个一个长度为n的数组,有q个询问:前l个数的子序列异或和为x的有多少个?结果对1e9+7取余首先介绍一下线形基(来自OI Wiki):线性基是向量空间的一组基,通常可以解决有关异或的一些题目。通俗一点的讲法就是由一个集合构造出来的另一个集合,它有以下几个性质: 线性基的元素能相互异或得到原集合的元素的所有相互异或得到的值。 线性基是满足性质 1 的最小的集合。 线性基没有异或和为 0 的子集。 线性基中每个元素的异或方案唯一,也就是说,线性基中不同的原创 2020-11-06 09:13:53 · 185 阅读 · 0 评论 -
图的存储方式——链式向前星
虽然vector建图会方便许多,但一些问题会卡vector建图。多几次就会了。//链式向前星/* des:顶点i指向哪个顶点 w 这条边的权值 next:顶点i的下一条边的序号*/struct node{ int des,next; int w; }e[N<<1];int head[N],cnt;//加边 void add(int u,...原创 2020-02-26 17:26:40 · 152 阅读 · 0 评论 -
牛客练习赛70——B.拼凑
题目链接题意:求字符串的最小子串内的子序列为"puleyaknoi"。题解:定义nxt[i][j]: 第i个字符后为字符‘a’+j的最近位置,然后暴力寻找即可。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<vector>#in原创 2020-09-27 16:44:24 · 153 阅读 · 0 评论 -
算法--分块(更好的暴力)
分块分块算法就是将一个序列分成若干块,分别进行操作来解决问题。总而言之就是“整块打包维护,碎片逐个枚举”。基本操作//block每一块大小 sz 分块数目 pos[i] 第i个数对应的是第几个块//st[j]第j个块开始的位置 ed[j]第j个块结束的位置 block=sqrt(n); sz=n/block; if(n%block) sz++; for(int i=1;i<=sz;++i) { st[i]=(i-1)*block+1; e原创 2020-09-26 22:34:15 · 86 阅读 · 0 评论 -
2020牛客暑期多校训练营(第六场)K-Bag (补题)
https://ac.nowcoder.com/acm/contest/5671/E题解:如果序列是k-bag的连续子串的话,满足一下三种条件之一:1.一个部分k-bag的前缀+若干个完整的k-bag+一个部分k-bag的后缀2.一个部分k-bag的前缀+一个部分k-bag的后缀3.一个部分k-bag判断部分k-bag:只需要判断区间内不同的数的个数是否等于区间的长度。这里cnt1[i]表示1~i区间内有多少不同的数,cnt2[i]表示n~i区间内有多少不同的数判断完整的k-ba转载 2020-07-31 10:52:52 · 171 阅读 · 0 评论 -
2020牛客暑期多校训练营(第六场)Easy Construction
https://ac.nowcoder.com/acm/contest/5671/E题解:1~n和为n^2/2+n/2,若满足条件那么当n为偶数时,k必是n/2;n为奇数,k为0;那么可以构造1,n-1,2,n-2......#include <bits/stdc++.h>using namespace std;//#define int long long signed main(){ int n,k; cin>>n>>k;原创 2020-07-31 10:32:22 · 143 阅读 · 0 评论 -
NC20860 兔子的区间密码 (结论题)
https://ac.nowcoder.com/acm/problem/20860题解:区间两端异或值的二进制位数一定是最大值的位数,那么我们将二进制位数上的值全部变为1.#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <vector>#include <utility>#include <q原创 2020-07-31 10:20:38 · 324 阅读 · 1 评论 -
Dubious Cyrpto CodeForces - 1379B(思维,枚举)
https://codeforces.com/contest/1379/problem/B题意:给定l,r,m要求构造出一组a,b,c,满足:l<=a,b,c<=r,存在一个正整数n,n*a+b-c=m数据范围:1<=l,r<=5e^5,1<=m<=1e10题解:对等式变换可知:n=(m+c-b)/a; 我们可知c-b的范围是[l-r,r-l];(这里很重要。。。我陷入误区:误认为[0,r-l],一直wrong);枚举a,要确定n是正整数,那么原创 2020-07-21 19:57:54 · 363 阅读 · 0 评论 -
学习逆元(扩展欧几里得,费小马定理,线性求解)
逆元:方程ax≡1(mod n)的一个解x,称x为a模m的逆。逆元的一个重要应用是求除法的模:如求(a/b)%m=?设b的逆元是k,则有(a/b)%m=((a/b)%m)((bk)%m)=(a/b*bk)%m=(ak)%m因此求(a/b)%m的值相当于求b的逆元求逆元的几种方法:1、扩展欧几里得算法求解方程ax≡1(mod m)相当于求解ax+my=1(ax-1是m的整数倍,设y是倍数,那么ax-1=my,即ax+my=1,y可以是负数);有解的条件是:gcd(a,m).原创 2020-07-14 22:09:27 · 297 阅读 · 1 评论 -
学习bitset和有关例题(为了更快的暴力)
bitset介绍bitset 是一个放二进制 0.1的容器,可以进行一些二进制可以进行的操作比如说或、且左移、右移等等。与普通的二进制位上进行的操作是相同的,每个元素仅用1bit空间,所以在于bitset 可以声明非常大的二进制位而不是仅仅限制于64位这样小的范围,并且它又保留了位运算快的优势。bitset用法 bitset<4> bitset1; //无参构造,长度为4,默认每一位为0 bitset<8> bitset2(12); //长度为8,二原创 2020-05-19 15:36:44 · 296 阅读 · 0 评论 -
“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛题解
A张老师和菜哭武的游戏(扩展欧几里得)题解:对于ax+by=c 存在整数解x与y,需要gcd(a,b)是c的因子。那么这题给出了a,b,直接求解gcd即可,用n除掉gcd就是可以拿走的数,再对这个数判断奇偶即可。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <bits/stdc++.h>using namesp原创 2020-05-11 12:09:23 · 196 阅读 · 0 评论 -
Moovie Mooving (状态压缩+二分)
题目戳这里题意:奶牛要在电影院里呆L分钟,这段时间他要看电影度过。电影一共N部,每部都播放于若干段可能重叠的区间,奶牛决不会看同一部电影两次。现在问他要看最少几部电影才能度过这段时间? 注:必须看电影才能在电影院里呆着,同时一场电影可以在其播放区间内任意时间入场出场。题解:设dp[s]代表已看的电影集合为s所能待到的最长时间,转移的时候枚举一个没有看过的电影,二分找到最近的开始时间,直接转移即可,详情见代码。//n<=20 枚举其状态 dp[s] s状态下最大的滞留时间 #inclu原创 2020-05-09 20:20:57 · 322 阅读 · 0 评论 -
poj1015Jury Compromise(动态规划+思维)
题解:令p-d为体积,p+d为价值;定义状态转移方程:dp[i][j][k]:从前i个人里选j个人其差值为k; 令【-400,0】用【0,400】表示;【0,400】用【400,800】表示;偏移量base=400;接下来就是01背包了,dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-1][k-(a[i]-b[i])]+a[i]+b[i]);#incl...原创 2020-05-07 21:18:44 · 166 阅读 · 0 评论 -
poj1170-Shopping Offers (完全背包+状压)
题意:一个含有b种商品的订单,给出订单内每个物品的初始价格和需要购买的数量,再给出s种套餐,这些组合会得到便宜的价格,最后怎样搭配使得总价格最少。题解:把每种商品对应的一个维度上去,由于每种商品的个数不超过5个,就像对应十进制一样,把它对应到6进制上;例如:1商品x1个,2商品x2个,3商品x3个...那么压缩成x1 *6的0次方 + x2 * 6的一次方 + x3 * 6的2次方 +...原创 2020-05-07 21:02:35 · 317 阅读 · 0 评论 -
hdu3092(数论+完全背包)
题意:将一个数拆分成几个数的和,并求出这几个数最小公倍数模M后的最大值代码#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;typedef long long ll;const int maxn=...原创 2020-05-06 20:54:53 · 179 阅读 · 0 评论 -
poj2955(区间dp)
题意:问一个仅包含[]()串中匹配的字符数,匹配方式为[X],(X),X为一个串,问一个长度为N(N<=100)串中最多的匹配字符个数。题解:dp[i][j]表示i~j内最大匹配字符个数,如果s[i]与s[j]匹配则dp[i][j]=dp[i+1][j-1]+2; dp[i][j]=max(dp[i][k]+dp[k+1][j]) i<k<j#include <i...原创 2020-05-06 20:50:57 · 175 阅读 · 0 评论 -
Codeforces 1342D - Multiple Testcases
补题!题意:给定 n 个数 m[i],每个 m[i] 都在 [1,k] 的范围内,再给定 k 个数 c[i],要求将所有的 m[i] 进行分组,c[i] 表示每组中大于等于 i 的数不超过 c[i] 个,问最少能分几组,并输出分组方案.题解:先求最小分组q。规定数组at[i]:为数组m中大于等于i的数的个数,那么q=max(q,(at[i]+c[i]-1)/c[i]);然后分组。对...原创 2020-04-27 17:08:48 · 222 阅读 · 0 评论 -
Codeforces Round #636 (Div. 3)D. Constant Palindrome Sum(差分)
题目链接思路:对于每一对组合,改变一次其和有一个范围,令s=x+y,则mx=s-min(x,y)+k,mn=s-max(x,y)+1.在区间[mx,mn]内对这个组合只需要改变1次,这个区间之外改变2次。那么自然可以想到差分。#include <bits/stdc++.h>using namespace std;typedef long long ll;const in...原创 2020-04-22 10:09:52 · 154 阅读 · 0 评论 -
牛客月赛23
A.膜法记录思路:注意到1<=n<=5,那么我们可以枚举行的消除情况,让后再判断列的消除是否可以满足。详情见代码.#include <bits/stdc++.h>using namespace std;const int maxn=1e5+10;char s[6][maxn];int n,m,t,a,b;int flag,vis[6];bool C()...原创 2020-03-22 18:23:28 · 144 阅读 · 0 评论 -
codeforces 1312E. Array Shrinking(区间DP)
题目链接:https://codeforces.com/problemset/problem/1312/E题解:由题意可知若一段区间可以合并则最后为一个值,num[i][j]=k,若k!=0表示区间[i,j]可以合并为k,去处理下num[i][j],然后枚举i更新dp[i]的值即可。#include <bits/stdc++.h>using namespace std;c...原创 2020-03-14 20:55:23 · 158 阅读 · 0 评论 -
CodeForces - 1324E Sleeping Schedule (dp)
题意:n个物品,顺序选择令t=a[i]或a[i]-1,即s=(s+t),问s在[l,r]的次数有多少次?简单dp,dp[i][j]:选取前i个物品到j时最优的次数;dp[i][j]=max(dp[i-1][(j-a[i]+h)%h],dp[i-1][(j-a[i]+1)%h]);在判断j是否在区间[l,r]内,若在dp[i][j]++;具体见代码:#include <b...原创 2020-03-14 14:14:36 · 171 阅读 · 0 评论 -
B. Count Subrectangles
题目链接题解:两个数组相乘后得n*m的矩形,求矩形中子矩形(仅包含1)面积为k的有多少个。先统计a,b两个数组中连续1的长度,然后枚举i,i*i<=k,emmm详情见代码,很好理解的(比赛时枚举方法不对,重测超时TqT。。。。经过朋友指导,重新写了一下)#include<bits/stdc++.h>using namespace std;typedef lo...原创 2020-03-08 11:00:48 · 298 阅读 · 0 评论 -
[codeforces 1313B] Different Rules(逻辑思维推导)
比赛时没有写出来,没有思路。。。。TqT比赛后看了别人的题解会的(我这个数学菜鸡)https://www.bilibili.com/video/av91242850?p=2题目链接:https://codeforces.ml/contest/1313/problem/B题意:一场比赛分两轮,每一轮你都有一个排名(每一轮每个人的排名是不一样的)。最终的排名就是两轮排名相加之后所排在第几个...原创 2020-03-06 17:23:15 · 331 阅读 · 0 评论 -
String Modification CodeForces - 1316B (找规律)
题目链接Vasya has a string s of length n. He decides to make the following modification to the string:Pick an integer k, (1≤k≤n).For i from 1 to n−k+1, reverse the substring s[i:i+k−1] of s. For examp...原创 2020-03-06 16:14:07 · 293 阅读 · 0 评论 -
Primitive Primes CodeForces - 1316C
题意:给出函数 f(x)=a0+a1∗x+⋯+an−1∗xn−1,g(x)=b0+b1∗x+⋯+bm−1∗xm−1,保证:gcd(a0,a1,…,an−1)=gcd(b0,b1,…,bm−1)=1,令 h(x)=f(x)∗g(x)=c0+c1∗x+⋯+cn+m−2∗xn+m−2;给出素数 p ,要求求出数 t 使得 ct 不能被 p 整除。数据范围: 1≤n,m≤1e6,2≤p≤109,1≤...原创 2020-03-06 15:12:41 · 165 阅读 · 0 评论 -
P1108 低价购买(DP)
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购买它。买的次数越多越好!你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数。你将被给出一段时间内一支股票每天的出售价(2^16范围内的正整数),你可以选择在哪些天购买这支股票。每次购买都...原创 2020-01-29 19:38:16 · 232 阅读 · 0 评论 -
D. Secret Passwords
题目链接题目大意:给一系列字符串,若ai和aj中有相同的字母,则ai和aj为等价的;若ai和ak等价,aj和ak等价,则ai和aj等价。输出有多少种等价的字符串。如:3abba输出 1(a,b, ba为一种等价的字符串)4aabbd输出 2(a, ab, d为一种;d为一种)题解:实际上就是建图求图中有多少连通图;具体见代码#inc...原创 2019-12-03 00:00:54 · 117 阅读 · 0 评论 -
X-factor Chains POJ - 3421 (质因数分解+组合数学)
给定一个正整数X, 一个长度为m的X-因子链是由m+1个整数组成的。其中 1 = X0, X1, X2, …, Xm = X 满足Xi < Xi+1 且 Xi 整除 Xi+1。现在要求X-因子链的最大长度和最大长度有多少条?Input多组数据,每一组数据一个正整数X (X ≤ 220).Output对于每组数据,输出X-因子链的最大长度和最大长度有多少条Samp...原创 2019-11-30 22:23:12 · 215 阅读 · 0 评论 -
Segments CodeForces - 22D
You are given n segments on the Ox-axis. You can drive a nail in any integer point on the Ox-axis line nail so, that all segments containing this point, are considered nailed down. If the nail passes ...原创 2019-11-24 23:01:49 · 208 阅读 · 0 评论 -
Drying POJ - 3104(二分)
题意:每件衣服都有一定单位水分,在不适用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分,但是遗憾是只有1台烘干机,每台烘干机同时只能烘干1件衣服,请问要想烘干N件衣服最少需要多长时间?输入第一行输入N,表示有N件衣服,第二行输入N件衣服的水分ai,第三行表示烘干机每分钟烘干水分K其中1 ≤ N ≤ 100 000,1 ≤ ai ≤ 1...原创 2019-11-24 14:19:56 · 229 阅读 · 0 评论