自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Nowcoder 20277 [SCOI2010]字符串(卡特兰数+组合数学)

题目一看就和卡特兰数有关,计算 即是最后的答案const ll mod=20100403;ll mul_mod(ll a,ll x,ll p){ ll ans=0; while(x){ if(x&1) ans=(ans+a)%p; a=(a+a)%p; x>>=1; } return ans;}ll pow_mod(ll a,ll x,ll p){ ll ans=1...

2020-10-30 12:24:41 22

原创 POJ 1845 &&AcWing 97. 约数之和(费马小定理求逆元)

根据约数和的推论知道:A 分解质因数后为,那么可以分解成如下的形式对于每一个括号内的式子,我们可以利用等比数列求和公式来完成例如第一个括号可以等价为由于 mod=9901 为质数,所以很容易想到利用 费马小定理 去求解逆元,但是由于 p-1 可能会大于 mod ,所以 p-1 可能为 mod 的倍数关系,所以需要进行特判根据公式:其实也很好想,对于每一个括号内的 p ,对其求余数,都为 1,所以累计求和为 1*Ci+1最后不要忘记是求解就好,最后加个特判...

2020-10-29 16:06:53 21

原创 POJ3696 && AcWing 202. 最幸运的数字(欧拉函数)

8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字。现在给定一个正整数L,请问至少多少个8连在一起组成的正整数(即最小幸运数字)是L的倍数。输入格式输入包含多组测试用例。每组测试用例占一行,包含一个整数L。当输入用例L=0时,表示输入终止,该用例无需处理。输出格式每组测试用例输出结果占一行。结果为“Case 1: ”+一个整数N,N代表满足条件的最小幸运数字的位数。如果满足条件的幸运数字不存在,则N=0。首先做一步转化为 : 另 d.

2020-10-29 14:57:17 39

原创 Educational Codeforces Round 97 (Rated for Div. 2) C. Chef Monocarp(动态规划 + 贪心)

有一个厨师,想要将 n 盘菜从烤箱中拿出来,但是每道菜都有一个特定的时间点 a[i] 拿出来时是最好的,但是他每分钟只能拿一道菜,如果在 t 分钟时拿了第 a[i] 道菜,那么他将增加 abs(a[i]-t) 的怒气值,求厨师最小的怒气值是多少看着这个题没有任何暴力的想法,所以考虑 DPdp[i][j]: 表示在 i 时间以内,将前 j 个菜取完所需花费的最小值当第 i 时刻取 j 时,那么表示 前 i-1 的时间之内没有取第 j 盘菜 : dp[i-1][j-1]+abs(...

2020-10-29 09:18:44 61

原创 Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree(BFS 思想)

#pragma GCC optimize(2)#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <utility>#in.

2020-10-28 22:51:31 25

原创 2020ICPC Intelligent Warehouse(线性动态规划)

其实看到这个题时能够想到 dp,当时想的是 dp[i] 以数 i 结尾的最大长度,其实想法没错,写了一个 O(n*n)的程序一开始的思路是,如果 dp[i] 是以 i 为结尾,那么(j<i 且 i %j ==0)的话,那么可以更新数组但是 n 太大,可以进行优化直至 O(n*sqrt(1e7)) ,换种思路想一下,以 i 为结尾,那么可以向后更新 dp[j],而不是向前更新O(n*n) 超时代码:int main(){ //IOS; while...

2020-10-27 22:11:24 75

原创 2020ICPC Matrix Subtraction(二维差分)

给出一个 n*m 的矩阵,再给出一个 大小为 x*y 的子矩阵,每次操作可以使矩阵内任意大小为 x*y 的矩阵内所有的元素减一,问是否可以使矩阵内所有元素都置 0const int N=1e3+5; int n,m,t; int i,j,k; int diff[N][N]; //差分数组 int sum[N][N]; //前缀和数组 int x,y;void add(int x,int y,int nx,int ny,int c){ ...

2020-10-27 09:23:07 39

原创 约瑟夫环(STL链表)

//#include <bits/stdc++.h>#include <iostream>#include <algorithm>#include <list>using namespace std;#define FOR(i,a,b) for(int i=a;i<=b;i++)#define null NULLconst double pi=3.14;const int N=2e5+5; int a[N];in...

2020-10-27 08:30:08 47

原创 2020ICPC Walking Machine(网格深搜)

有一个网格 n*m ,网格上有一个字母,必须按照网格上的指示移动,问从这 n*m 个点出发有几个点可以出界只要深搜姿势正确,再加点信心,AC 其实很简单const int N=1e3+5; int n,m,t; int i,j,k; char a[N][N]; int vis[N][N]; int flag=0;void dfs(int x,int y){ if(vis[x][y]==-1) return ; ...

2020-10-26 23:33:39 30

原创 Codeforces Round #678 (Div. 2) C. Binary Search(二分+组合数学)

给出数 n ,也就是说有 0~n-1 随机排列,给出 x 以及 x 的位置 pos,问 :在 x 固定在 pos 的条件下,利用二分搜索能够找到 x 的数列的排列方式有几种其实一开始做这个题的时候,一点思路都没有,但是画了一下数轴差不多就可以想出来,大体思路利用二分查找,枚举位置 mid,如果 mid > pos ,说明 mid 位置的数必须大于 x,如果 mid < pos,那么mid 位置的数必须小于 x,最后将剩下的数随意排列即可但是注意到几个边界条件(这也是二分...

2020-10-26 23:27:41 71

原创 训练周记

从上周开始,由于深知过去数论学的很差,所以这周已经很用力地学它了,虽说是这样,数论的题目可以知道该用什么来解决,以及题目中给出的求余数 mod 该如何使用,新学习了组合计数以及矩阵快速幂的知识,组合计数的问题难想一点,而矩阵快速幂的模板的味道多一点数论利用 baby_step_gaint_step 算法求解 a^x=b(mod p) 当且仅当 p,a 互质且 p 为质数 的时候当然,如果没有特别说明 a,p 互素,需要考虑不互素的情况,a 是 p 的倍数或者说是 a==0时(a%p==..

2020-10-25 21:22:32 61 2

原创 1643:Fibonacci 前 n 项和

s[n]=s[n-1]*1+f[n]+f[n-1]*0f[n+1]=s[n-1]*0+f[n]+f[n-1]f[n]=s[n-1]*0+f[n-1]*0+f[n]按照这三个方程构造矩阵即可#include <iostream>#include <cstdio>#include <cstring>#define N 3+5using namespace std;typedef long long ll; ll n,m; ...

2020-10-25 11:23:02 32

原创 POJ 3070 Fibonacci(矩阵快速幂)

矩阵快速幂入门题F[n] 为第 n 个斐波那契数,F[n]=F[n-1]*1+F[n-2]*1,F[n-1]=F[n-1]*1+F[n-2]*0所以,利用矩阵可化简为其中转移矩阵的个数有 n-2 个,而且 F[2]=F[1]=1所以只需要计算转移矩阵的 n 次方,再将第一行的两个数相加即可#include <iostream>#include <cstdio>#include <cstring>#define N 2+5#de...

2020-10-25 11:02:50 21

原创 1652:牡牛和牝牛

这 n 头牛首先要确定有多少公牛,有多少母牛,如果有 i 头公牛,那么至少有(i-1)*k 头母牛,由于 p>n 所以直接做即可const ll mod=5000011;const int N=30+5; int n,m,t; int i,j,k; //int a[N];ll pow_mod(ll a,ll x,ll p){ ll ans=1; a%=p; while(x){ if(x&1) ans...

2020-10-24 12:21:41 38

原创 1650:组合

因为 n 的值很大,所以需要借助 lucas 定理进行化简,另外 jc 数组没法开到 p 的大小,所以不能采用预处理的方式ll pow_mod(ll a,ll x,ll mod){ ll ans=1; a%=mod; while(x){ if(x&1) ans=ans*a%mod; a=a*a%mod; x>>=1; } return ans;}ll C(ll n,ll m,l...

2020-10-24 10:57:27 19

原创 AcWing 211. 计算系数

求解 :由于 p =10007 为质数,所以用费马小定理,计算出 n! m! 的逆元求解即可const ll mod=10007;const int N=1000+5; int n,m,t; int i,j,k; //int a[N];ll pow_mod(ll a,ll x,ll mod){ ll ans=1; a%=mod; while(x){ if(x&1) ans=ans*a%mod; ...

2020-10-24 10:14:24 25 2

原创 POJ 2417 Discrete Logging(Baby-Step,Giant-Step)

给出 p,b,n,p 为质数,求中 x 的最小解,如果没有输出 no solution int n,m,t; int i,j,k; //int a[N];ll mul_mod(ll a,ll x,ll mod){ a%=mod; ll ans=0; while(x){ if(x&1) ans=(ans+a)%mod; x>>=1; a=(a+a)%mod; }...

2020-10-24 09:41:48 23

原创 卢卡斯定理

卢卡斯定理是用来解决排列组合问题中的一个问题先来看一下基础的知识

2020-10-22 23:40:23 62 1

原创 P6786 「SWTR-6」GCDs & LCMs(数学推导)

刚开始做这个题的时候也是不清楚样例但是数学公式来的假设 y>x (y 是 bj,x 是 bi)x+y+gcd(x,y)= lcm(x,y)另 gcd = d,且知道 lcm=x*y/dx/d+y/d+1=(x/d) * (y/d)所以 (x/d-1)*(y/d-1) = 2所以 可以得到 y/d=3, x/d=2即 3x=2y根据上述推导 ,代码就出来了,对于每一个确定的 y ,去寻找数列中是否有对应的那个 x,之后此 x 变为 y,重复上述操作...

2020-10-22 20:42:40 20

原创 Codeforces Round #677 (Div. 3) C. Dominant Piranha

给出 n 个数,若 a[i] 大于 a[i-1] 或 a[i+1] 那么他可以吃掉与他相邻的比他小数,并且自身的值 +1,且被吃掉的数消失,问是否存在一个这样的数,可以将出他以外所有数吃掉数组中最大值的两边若存在一个比他小的即可完成过程const int N=3e5+5; int n,m,t; int i,j,k; int a[N]; int main(){ //IOS; rush(){ sd(n); ...

2020-10-21 12:42:06 89

原创 Codeforces Round #677 (Div. 3) D. Districts Connection(思维)

给出 n 个数,要求在每个数之间建一条道路,要求相同的两个数之间不能够直接相连,但可以间接相连,若存在请输出这 n-1 条边,答案存在多个只需从数组中找到不同的两个数,即可完成建图过程const int N=5000+5; int n,m,t; int i,j,k; int a[N];int main(){ //IOS; rush(){ n=read(); int p=1,q=0; ...

2020-10-21 12:37:17 145 1

原创 HDU 2802 F(N)(寻找循环节)

按照题意打表 1e9 一定超时,所以一定存在规律,将上述公式化简为 f(n)=f(n-2)+3*n*(n-1)+1 后进行打表,找到循环节之后,问题就解决了const int N=1e5+5;const ll mod=2009; int n,m,t; int i,j,k; int a[N]; ll dp[N],cur;void init(){ dp[1]=1; dp[2]=7; for(i=3;i<=100000;i...

2020-10-20 21:40:48 16

原创 Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维+哈希表)

有 n 个数 a 数组,要求你求出 ans[k] k[1,n] ,定义 ans[k] 对于数组 a 中每一个长度为 k 的子段中,都存在一些数 m1,m2,m3,……mi , m 为其中的最小值,作为 ans[k] 的值const int N=3e5+5;const ll mod=21252; int n,m,t; int i,j,k; int a[N]; vector<int> v[N]; int ans[N];void i...

2020-10-20 18:42:43 31

原创 HDU 3579 Hello Kiki(中国剩余定理)

给出一个数 n ,再分别给出 2n 个数 a[i],和 r[i],表示n个同余方程组:x mod a[i]= r[i] , 求满足方程组的最小正整数 x,若不存在 输出 -1const int N=100+5;const ll mod=21252; int n,m,t; int i,j,k; ll a[N],r[N];ll ex_gcd(ll a,ll b,ll &x,ll &y) //ax+by=gcd(a,b){ ll g...

2020-10-20 17:57:32 41 1

原创 POJ 2115 C Looooops(一元线性同余方程)

输入 A,B,C,k,判断 for (variable = A; variable != B; variable += C) 循环执行几次题目转化为 (ans*C+A)=B(mod 2^k),求解一元线性同余方程裸题ll ex_gcd(ll a,ll b,ll &x,ll &y) //ax+by=gcd(a,b){ ll gcd=a; if(!b) x=1,y=0; else { gcd=ex_gcd(b,a%b,y,x...

2020-10-20 17:01:21 24

原创 训练周记

这周的状态不是很好,确实是偷懒了,开始两天把数据结构做了个结尾,把 treap 的模板终于调了出来,之后收到了开数学的通知,一开始我是挺愿意学着一部分的,我本身也对数学比较感兴趣(虽然啥也不会,只是感兴趣),同时数据结构的码量太大了,一个错误找半天,但是看了看数学的题单,数论学的一瓶子不满半瓶子晃荡的我看到题单上的基础知识几乎没有会的呀,而且还没有趁手的资料,虽然这周说是学了很久,但是我记得从早上8点开始准备学,一直到10点才决定从这个题码起,也就这两天,开始重温数论,果然他没让我失望,还是那么难…….

2020-10-18 23:08:04 31 1

原创 POJ 2891 Strange Way to Express Integers(中国剩余定理)

题意:题目给定多个式子,xai(mod mi),因为不确定其中 ai,mi 的关系,也就是说不清楚是否互质,所以,例如有两个式子x=r1+k1*a1 -----(1)x=r2+k2*a2 -----(2)求 x ,根据扩展欧几里得原理,两式相等得:k1*a1-k2*a2=r2-r1,其中要满足r2-r1=k*gcd(a1,a2)所以利用函数 ex_gcd 求解 x 的答案,进而求得 k1 的值,这样 (1) 式就有了答案,因为 (1)式中的 x 的值同样要...

2020-10-18 12:14:09 179 1

原创 POJ 1006 Biorhythms(中国剩余定理)

根据题意,在同一天出现,满足 3 个 a[i]%xb[i] 的关系所以利用中国剩余定理,因为 23,28,33 互质,所以直接求解逆元即可。ll mod=21252; int n,m,t; int i,j,k; //ll a[N],b[N];ll ex_gcd(ll a,ll b,ll &x,ll &y) //ax+by=gcd{ ll gcd=a; if(!b) x=1,y=0; else { ...

2020-10-17 20:36:08 26

原创 1634:曹冲养猪(中国剩余定理)

利用中国剩余定理 求解 b[1]=n1%a[1],b[2]=n2%a[2], ……b[x]=nx%a[x]假设 m=a[1]*a[2]*……a[n]那么利用 ex_gcd(m/a[i],a[i],x,y)求解的是,两个互质的数 m/a[i],a[i] 的方程 ,即 x 为 m/a[i] 的逆元,这样在 *余数 b[i],就可以得到除 a[i] 之外的所有数的公倍数 ni,且 ni 还满足 ni%mb[i]const int N=1e3+5;ll mod=1e9+7; ...

2020-10-17 19:54:58 35 1

原创 POJ 1061 青蛙的约会(扩展欧几里得)

x+nt-(y+mt)=kL -> kL+t(n-m)=x-y这样就变成了我们熟悉的 ax+by=c 的形式,其中 k,t 为未知量利用扩展欧几里得求解之后,因为 ax+by=k*gcd两边同时除以 gcd 所以变为 a' x+b' y=k此时 a,b 互质,相比于真正的欧几里得 ax+by=1 得到的答案 x 的值应扩大 k 倍最后求解最小的正数 x 的解即可ll ex_gcd(ll a,ll b,ll &x,ll &amp...

2020-10-17 18:30:34 22

原创 CodeForces 630 I. Parking Lot(排列组合)

有 2*n-2 个车位 ,有 4 种车,车可以看作为无穷多,当且仅当 n 辆相同种类的车挨在一起时,老板会很开心,问有多少种方式让老板开心对于每种车而言:有 n 辆放在停车场的两端时,此时还剩 n-2 个位置,需要用另一种颜色的车将其分隔开,剩下的每个位子可以放任意的车 ,即 2(表示两端)*4*3*4^(n-3)当这 n 辆车不放在两端时,对于这 n 辆车有 n-3 个位置可以放, 在这 n 辆车的两端都要放置与其对应的不同颜色的车,此时还剩 n-4 个位置可以随便放,4*(n...

2020-10-17 16:15:40 26 1

原创 CodeForces 630 K. Indivisibility(容斥原理)

题目链接:http://codeforces.com/problemset/problem/630/K给出一个数,问再区间 [1,n] 中有多少个数不能被 [2,10] 中任意一个数整除只需要统计被 2,3,5,7 整除的即可,但是像 6 可以被 2,3 整除,所以根据容斥原理要减去那一部分int main(){ IOS; ll n; while( cin>>n ){ cout<<(n-n/2-n/3-n/...

2020-10-15 11:09:44 23

原创 POJ 3370 && HDU 1808 Halloween treats (鸽巢原理)

有 m 个小孩,n 个数,每个数代表糖果的数量,是否能够拿任意数量的糖果 sum,使得 sum%m==0 ,如果有输出下标 i(可能有多组输出样例,输出任意一种),不能的话输出 no sweetsconst int N=1e5+5; int n,m,t; int i,j,k; int a[N]; int sum[N] , pos[N]; void init(){ ms(sum,0); ms(pos,-1); sum[0...

2020-10-15 10:30:48 22

原创 POJ 2356 Find a multiple(鸽巢原理)

有 n 个数,现在让你从中取 m 个数,(m 可以自己任意给定),要求 m 个数的和为 n 的倍数,最后输出 m ,再按照数的大小,升序输出这 m 个数对初始数组排序后,求其前缀和对 n 取余,这样前缀和有 n 个数,根据鸽巢原理, 前缀和数组 sum[] 下标范围从 [0,n]这样一定有两个前缀和 sum[i] ,sum[j] 相等,这样这 m 个数就是 a[i+1,j] , 这 m 个数恰好可以被 n 整除const int N=1e4+5; int n,m...

2020-10-15 10:10:09 21

原创 C1. Pokémon Army (easy version)(栈模拟)

有 n 个数,从中选出任意 x (x 为随机数)个数但是不能打乱顺序,有 p 次操作,可以交换对应两个数的位置现在要求你选出的这几个数中 能够构成 a1-a2+a3-a4……ax 值最大输出最后的值简单版本 p =0const int N=3e5+5; int n,m,t; int i,j,k; ll a[N]; stack<ll> s;int main(){ IOS; rush() { ...

2020-10-13 09:16:06 33

原创 将中缀表达式转化成后缀表达式

#include <iostream>#include <map>#include <stack>using namespace std; int n,m,t; int i,j,k; //int a[N]; map<char,int> mp;int main(){ //IOS; mp['+']=mp['-']=1; mp['*']=mp['/']=2; mp['(']=3,mp['.

2020-10-13 08:32:09 42 1

原创 1568:普通平衡树

const int N=1e5+5; int n,m,t; int i,j,k; //ll a[N]; struct Node { int l,r; int fa,prl; int val; //父节点,优先级,值 int sz,cnt; //节点的大小,节点包含重复元素的个数 }node[N]; int root=0,tot=0,ans; //根,节点个数,记录前驱后继答案...

2020-10-12 20:44:46 50

原创 训练周记

这次的总结总结一下最近的学习状况吧,这周好不容易结束了数据结构,但是平衡树的模板调了一个上午没调出来,不过这周收获还是蛮大的,边权树剖的题目理解得差不多了由于每个节点只有一个父节点,但是有多个子节点,所以以子节点看作边求解,因为这样,在单边修改的时候,要找对应边上深度较大的点,在区间修改时,要忽略掉他们的 LCA ,因为我们将每个点权映射到其儿子节点上,根节点上无边,例如:要求你修改 2 条边的边权时,如果算上 LCA 的话,一共三条边,这是就需要将 LCA 抹去所以在退出 while 循环后,x,

2020-10-11 23:24:18 28

原创 POJ 3237 Tree(边树剖)

这个题比较难是因为,有一个区间取反操作,(好吧,还是我菜)求一个区间的最大值,若区间内所有的数都变成原来的负数形式,那么其最小值就成为了最大值还有一点就是在树剖中的点权变为了边权,因为这样,在单边修改的时候,要找对应边上深度较大的点(代码中的注释 1),在区间修改时,要忽略掉他们的 LCA ,因为在退出 while 循环后,x,y 两点跳到同一条重链上,深度最小的那个点就是 LCAconst int N=1e5+5; int n,m,t; int i,j,k;...

2020-10-11 10:20:31 31

原创 POJ 2528 Mayor‘s posters(线段树+离散化)

有 n 张海报,每张海报覆盖一段区间,后面的海报会覆盖前面的海报,求最后有多少张海报可以在墙上被看见(看见一点也算)const int N=1e5+5; int n,m,t; int i,j,k; //int a[N]; Pair p[N<<2]; vector<int> v; struct Node { int l,r; int flag;//被第几张海报覆盖 ...

2020-10-11 07:53:35 22

codeblocks17.12安装包.zip

适合新手使用的编译器,之后更新 百度网盘安装包: 链接:https://pan.baidu.com/s/1M1PGcirlC0He1WjOFrw8gQ 提取码:jfq5

2020-07-02

scanf运行完在缓存区留下回车,再用cin输入回车

发表于 2019-11-18 最后回复 2019-11-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除