自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 约瑟夫问题

求n个人,每次报m次出队,求第k个出队的人f[n][k]=(f[n−1][k−1]+m−1)%nf[n][k]=(f[n-1][k-1]+m-1)\%nf[n][k]=(f[n−1][k−1]+m−1)%n时间复杂度为O(k)O(k)O(k)当kkk很大但是m<<nm<<nm<<n时,可以把多次(m−1)(m-1)(m−1)加在一起,一起取模#inclu...

2019-10-14 10:11:46 278

原创 FWT

FFT:FFT:FFT: Ck=∑i+j=kAi∗BjC_k=\sum_{i+j=k}A_i*B_jCk​=∑i+j=k​Ai​∗Bj​FWT:FWT:FWT: Ck=∑i⊕j=kAi∗BjC_k=\sum_{i \oplus j=k}A_i*B_jCk​=∑i⊕j=k​Ai​∗Bj​#include<cstdio>using namespace std;const int N...

2019-10-12 18:27:54 271

原创 TIPS!

long long(包括 %lld %I64d 1LL)输出方案、编号的时候,如果排序注意原始编号

2019-10-05 13:10:46 248

原创 欧拉定理相关

a ^ a ^ a ^ … ^ b % m#include <bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=1e6+5;typedef long long ll;int minDiv[maxn],phi[maxn],sum[maxn];int T...

2019-09-04 15:51:42 301

原创 2019杭电多校第十场

1003 Valentine’s Day从大到小不断组合,如果开心1次的概率大于开心0次概率就可以break了因为x会越来越小#include<bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;int T...

2019-09-01 21:23:16 266

原创 2019杭电多校第九场

1005 Rikka with Game如果开头是a~x的话直接结束游戏如果开头是y,都不会改变如果开头是z,那么先手变为a,后手变为b所以就是跳过开头一堆y,然后如果是z就变为b,否则不变#include<bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int T,n,fl...

2019-09-01 21:04:35 216

原创 2019牛客多校第十场

B.Coffee Chicken对于S(n)S(n)S(n),考虑某个字母是从S(n−1)S(n-1)S(n−1)转移还是从S(n−2)S(n-2)S(n−2)转移#include<bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)#define N 10005using namespace std;int T,n,q,...

2019-09-01 20:44:42 177

原创 2019牛客多校第九场

B.Quadratic equation由题意可设x+y=kp+bx+y=kp+bx+y=kp+b代入第二个式子中可以得到kpx+bx−x2≡c(modkpx+bx-x^2 \equiv c(modkpx+bx−x2≡c(mod p)p)p)第一项是p的倍数可以约掉,所以有x2−bx+c≡0(modx^2-bx+c \equiv 0(modx2−bx+c≡0(mod p)p)p)配方得(x...

2019-08-16 16:47:55 215

原创 2019杭电多校第八场

1004 Acesrc and Hunting很遗憾由于没有考虑到nnn和mmm的大小关系导致赛后五分钟补题。。。首先构造2∗k2*k2∗k的形式012345601234560123456abcdefgabcdefgabcdefg当k是奇数时,顺序为0b2d4g5e6f3c1a0b2d4g5e6f3c1a0b2d4g5e6f3c1a012345670123456701234567ab...

2019-08-16 16:06:40 206

原创 2019杭电多校第七场

1001 A + B = C考虑最终答案的形式(列竖式),因为两个数相加最多只会进一位,所以C要么和A/B对齐,要么往前多一位,暴力判断四种情况即可1006 Final Exam本题的难点在于读题。。首先题目的直观理解应该是,我给出一种复习方法,那么不管题目怎么分配,我都能做出至少k题,换句话说,我的方案必须可以应付所有的出题情况那么我们可以反方向考虑,如何构造一种情况让我做不到k道题?...

2019-08-13 21:45:34 232

原创 2019牛客多校第八场

A.All-one Matrices按行枚举(即枚举下边界)e.g.e.g.e.g.000000000000000001100011000110001000010000100011110111101111111101111011110以最后一行为例,首先找出每个元素向上连续1的个数:124201242012420然后我们可以知道,区间[1,4][1,4][1,4][2,3][2,...

2019-08-13 17:49:21 160

原创 2019牛客多校第七场

A.String万万没想到这题暴力就可以艹过去。。(感谢隔壁队伍大喊一声“暴力都能过”)据说直接O(N3)O(N^3)O(N3)就可以了?毕竟这个时间复杂度几乎不可能跑满我们的做法大概是找到一个全新的0进行check。。哎算了不管怎么做都能对出题人也是非常心机的稍微放大了数据范围,所以如果不能想到“复杂度是假的”那么就会想我们队一样自闭两个小时#include<bits/stdc...

2019-08-09 21:29:30 274

原创 2019杭电多校第六场

1005 Snowy Smile考虑朴素的最大子矩阵和首先枚举上下边界,然后问题就转化成了维护最大子段和这个问题可以用线段树解决用maxvmaxvmaxv、prevprevprev、sufvsufvsufv分别表示当前区间的最大值、当前区间紧贴左端点的最大值、当前区间紧贴右端点的最大值单点修改时间复杂度位O(logN)O(logN)O(logN),查询复杂度为O(1)O(1)O(1)因...

2019-08-09 19:44:14 325

原创 【模板】主席树

查询区间k小值输入n个数,每次询问某一区间内的第k小值。样例输入7 31 5 2 6 3 7 42 5 34 4 11 7 3样例输出563#include<cmath>#include<cstdio>#include<vector>#include<cstring>#include<iomanip>#i...

2019-08-06 17:10:46 130

原创 【模板】线性基

线性基插入void insert(int rt,ll x){ int i; fd(i,31,0) if (x & (1<<i)) if (basis[rt][i] == 0) { basis[rt][i] = x; return; } else x =...

2019-08-06 17:08:28 148

原创 2019杭电多校第五场

1001 fraction题意是求bbb使得ab≡x(mod\frac{a}{b} \equiv x (modba​≡x(mod p)p)p)引入一个数yyy变形成a=bx−pya=bx-pya=bx−py考虑到aaa的范围是0&lt;a&lt;b0&lt;a&lt;b0<a<b,把上式代入就可以得到px&lt;by&lt;px−1...

2019-08-06 15:44:24 290

原创 2019牛客多校第六场

A.Garbage Classification按照题意模拟就好也许可能要当心那个除法?建议转换成乘法做#include <bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int T,dry,wet,harm,t,n,i,x;char ch[3000],s[100];int ...

2019-08-04 18:51:22 492

原创 2019牛客多校第五场

A.digits 2直接输出nnn个nnn就好#include<bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int T,n,i;int main(){ cin>>T; while (T--) { cin>>n;...

2019-08-04 17:26:08 206

原创 【模板】最小点覆盖、最大独立集

#include <bits/stdc++.h>using namespace std;const int N=100050;const int M=100050;int n,m;struct Edge{int v,next;}edge[M];int cnt,head[N];void init() {cnt=0; memset(head,-1,sizeof(head));...

2019-08-02 16:28:11 294

原创 2019杭电多校第四场

1001 AND Minimum Spanning Tree首先我们要尽可能地连权值为0的边一个数,最小的与它and起来是0的数,实际上是在找二进制下的第一个0比如(11110011)2(11110011)_2(11110011)2​,那么答案应该是(100)2(100)_2(100)2​,这样做字典序也会最小如果找不到这样的数,那么答案就是111,同样也能保证字典序最小#include...

2019-08-01 20:44:55 182

原创 2019杭电多校第三场

1006 Fansblog首先由质数的密度分布可以大力猜测这个质数QQQ离PPP应该不会很远,所以暴力从大到小枚举就好判断是不是质数可以用MillerRobinMiller RobinMillerRobin测试然后用一下威尔逊定理:当且仅当ppp是质数时,(p−1)!≡−1(mod(p-1)!\equiv -1(mod(p−1)!≡−1(mod p)p)p)所以用逆元搞一下就好了1007...

2019-08-01 20:15:56 163

原创 2019牛客多校第四场

A.meeting场上写了一坨树形dp。。。dfs序枚举集合点,答案由三部分组成:A:从父亲往外的节点(多走一步)得到(一边dfs一边更新)B:从自己的兄弟(多走两步(先到父亲再往下))得到C:从自己的子树得到写得极其凌乱。。打了无数的补丁。。当然最快的做法就是找到最远关键点对,类似于树的直径跑两遍dfs或dfs即可//树形dp#include <bits/stdc++.h...

2019-07-29 20:35:41 306

原创 2019牛客多校第三场

B.Crazy Binary String最长子序列直接找000和111中较少的那个即可对于最长子串,把000看作−1-1−1的话,即找区间和为000的最长区间数组记录前缀和出现的最早位置就可以了#include<bits/stdc++.h>#define N 500000#define fo(i,a,b) for(i=a;i<=b;i++)using namesp...

2019-07-25 20:27:59 161

原创 2019杭电多校第二场

1010 Just Skip The Problem一次询问nnn个串,第iii个串第iii个位置为0,其余均为1答案就是min(n!,mod)min(n!,mod)min(n!,mod)不过出题人似乎并没有考虑111的时候答案是222(询问111和000都可以)#include<bits/stdc++.h>#define fo(i,a,b) for(i=a;i<=b;...

2019-07-25 20:21:34 320

原创 2019杭电多校第一场

1001 Blankdp[i][j][k][t]dp[i][j][k][t]dp[i][j][k][t]表示0,1,2,30,1,2,30,1,2,3出现的位置排序后为i,j,k,ti,j,k,ti,j,k,t的方案数枚举第t+1t+1t+1位的情况进行转移对于限制情况,固定右端点,暴力枚举所有状态,把所有非法状态清零#include<iostream>#include&lt...

2019-07-25 19:13:18 203

原创 2019牛客多校第二场

A.Eddy Walker蒙特卡洛+猜答案注意答案要累乘H.Second Large Rectangle最大的可以用RMQRMQRMQ做然后挖掉四个角分别再做一次即可J.Subarray挂一下大佬的链接https://www.cnblogs.com/FST-stay-night/p/11218660.html最重要的是学会了前缀和查询相差为111的时候的奇技淫巧#include...

2019-07-25 00:35:43 230

原创 2019牛客多校第一场

A.Equivalent Prefixes二分答案,check的时候每次找到区间最小值,如果位置不一样则返回false,否则两边继续递归#include <bits/stdc++.h>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=1e5+5;int posa[maxn...

2019-07-25 00:27:27 179

原创 一些常见的显然结论(不是)

记录一下一些骚的1p的结论平面上有两类点,问是否能用一条直线分开等价于这两类点形成的凸包是否相交

2019-07-23 15:29:30 170

原创 Codeforces 1156B

给你一个字符串,让你重新排列,使得相邻两个字符的ASCII码的差的绝对值不超过1首先,相同的字符可以放在一起,所以问题可以转换为至多26个不同字母的排列。构造法:按照aceg…bdf…的顺序构造不合法的情况只有ab或abc这样的情况(没有具体想过)爆搜法:考虑到如果有大量字母,xjb搜索就能搜到一个合法答案。换句话说不合法的情况数据量一定很小,所以爆搜即可。#include<ios...

2019-05-07 21:46:35 279

原创 Codeforces 1152C

求最小的 kkk 使得 lcm(a+k,b+k)lcm(a+k,b+k)lcm(a+k,b+k) 最小。lcm(a+k,b+k)=(a+k)(b+k)gcd(a+k,b+k)=(a+k)(b+k)gcd(a+k,a−b)lcm(a+k,b+k)=\frac{(a+k)(b+k)}{gcd(a+k,b+k)}=\frac{(a+k)(b+k)}{gcd(a+k,a-b)}lcm(a+k,b+k)=...

2019-05-06 11:07:28 167

原创 Codeforces 1154E

有n个人,每个人的能力值是1到n的排列;两队轮流取人,每次取出当前能力值最大的人,以及他左边k个人和右边k个人(不足k个则全部取走);请问最后每个人在哪个队伍中。这题严格的做法应该是可以做到O(n)O(n)O(n)的,不过并没有卡O(nlogn)O(nlogn)O(nlogn)。考虑每次找最大值,因为每次取出的数都是连续的,所以用链表实现,修改头尾指针即可。注意每次找最大值的时候可以用f...

2019-04-29 10:30:21 1295

原创 Codeforces 1154G

给你n个数,找到两两lcm的最小值。果然脑子题还是做不来。。。枚举gcd,找到最小的两个能被这个gcd整除的数,就是这个gcd对应的答案(如果换成其他数字答案一定更大)对于所有的gcd找到一个最小值就好了#include<iostream>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;long long...

2019-04-28 13:55:25 237

原创 【BZOJ 4887】【TJOI 2017】可乐

设f[i][j][1]表示第i秒停在j上没有爆炸的方案数,设f[i][j][0]表示第i秒停在j上的总方案数。 f[i][j][1]=f[i-1][j][1]+f[i-1][k][1] f[i][j][0]=f[i-1][j][0]+f[i-1][j][1]+f[i-1][k][1] 然后我们发现这是一个一阶递推,所以直接矩阵转一转就好了! PS:我可能对我那套矩阵理论有些。。不放心啊?我已

2017-05-05 07:51:53 911

原创 【BZOJ 4584】【APIO 2016】赛艇

首先离散化一下,然后令f[i][j][k]表示做到第i个学校,最后一个数落在j号区间,这个区间里有k个不同的数的方案数。(实际上如果两个学校的数量是一样的,那么对后面的方案是没有影响的,所以记录的是k个不一样的数)。 sum[t]=∑f[i-1][j][p] (1<=j<=t) f[i][j][k]=f[i-1][j][k]+f[i-1][j][k-1]*(len[j]-k+1)/k f[i]

2017-05-05 07:43:34 617

原创 【BZOJ 1408】【NOI 2002】Robot

题目相当于重新定义了一下φ\varphi和μ\mu,只不过和原定义有一些区别。 首先可以求出第一问和第二问,这等价于在所有奇质因子中取奇数个(偶数个)互不相同的奇质因子的方案数,直接dp即可,注意φ\varphi函数是积性函数,直接乘起来即可。 第三问实际上就是所有方案的数量减去前两种方案,同样也可以dp直接求解。但是注意由于φ\varphi不是完全积性函数,所以当一个质因子是次数是一次时乘上的

2017-05-05 07:39:41 499

原创 【BZOJ 4873】【2017六省联考】寿司餐厅

对于m=0,相当于每个寿司的价格是独立的,那么设f[i][j]表示i到j这个区间寿司全部被取的最大美味度,显然f[i][j]可以从它的子区间得到。然后dp组合一下若干个区间就好了,60分感人。 正解是最大权闭合子图,把每个区间f[i][j]看作是一个节点A(i,j),把每个寿司看作是一个节点B(i),有如下约束条件: 1、取了A(i,j),一定要取A(i+1,j)和A(i,j-1); 2、取了

2017-04-27 14:28:12 1001

原创 【BZOJ 4872】【2017六省联考】分手是祝愿

如果不考虑期望,只考虑最少次数: 从n开始考虑,n这盏灯只有n这个开关才能影响;当n这个开关确定之后,第n-1盏灯只有第n-1个开关才能影响……贪心一下就能知道最少次数了。 出题人良心啊给了这么多样例,还给了50分的k=n。 k=n是什么意思?显然开关的先后顺序是没有影响的,而且一个开关最多按一次(按两次等于没按),所以最多只要按n次,所以k=n直接输出最少方案就可以了。直接暴力枚举就能过,时

2017-04-27 14:14:48 1315

原创 【BZOJ 4870】【2017六省联考】组合数问题

其实我刚看到题目跟大部分人的反应是一样的,暴力Lucas定理。。。 后来发现没说模数一定是质数,那没事还是能骗好多分的。 然而事实上是那些暴力分根本用不到Lucas定理。。。 正解: 所求式子的意义:从nk个物品中取 模k余r 个物品的方案数。 显然有f[i+1][j]=f[i][j]+f[i][j−1]f[i+1][j]=f[i][j]+f[i][j-1],发现i是轮换的,所以这是一个一

2017-04-27 14:01:31 1041

原创 【BZOJ 4869】【2017六省联考】相逢是问候

考虑一个欧拉定理的扩展: 当x>φ(p)x>\varphi (p)时有: cx≡cx%φ(p)+φ(p)(modp)c^x \equiv c^{x\%\varphi (p)+\varphi(p) }(mod p) 也叫作欧拉定理EXT,证明看这里:https://zhuanlan.zhihu.com/p/24902174 这个公式的强大之处在于a和p可以不互质,也就是说p可以不为质数。 然

2017-04-27 13:54:41 2861

原创 【BZOJ 4868】【2017六省联考】期末考试

考虑暴力枚举最晚公布的时间x,关注到2操作是没有负面影响的1操作,所以如果A大于B,那么只需用2操作就可以了,否则先用1操作,不能用1操作后再用2操作。这样就能把b数组全部变成小于等于x,在加上额外的不愉快度就可以了。这个算法的时间复杂度是O(N2)O(N^2),可以拿60分。 如果你去打表就能发现不愉快度关于时间是一个下凸函数,可以用三分做。具体的证明是这样的: 1、修改代价关于时间是单调递减

2017-04-25 08:42:57 1401

空空如也

空空如也

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

TA关注的人

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