自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforces Round #703 (Div. 2) C2 - Guessing the Greatest (hard version)(二分+思维)

有 n 个数构成一种排列,每次询问一个区间,可以给出区间中第二大数的位置,在 20 次询问中找到区间最大数的位置又是一道交互题,一眼二分一开始想的是对于区间询问其第二大数的位置 pos,然后再查询区间中的第二大数的位置,如果两者相同,那么一定在,否则在中,但是策略被卡,询问次数过多值得注意的是题目一开始就可以得到中的第二大数的位置,利用这个位置与 mid 就可以完成 logN 的复杂度但是中间需要注意区间中第二大数的位置 pos 是固定的,二分过程...

2021-02-20 21:58:43 33

原创 洛谷 P2953 [USACO09OPEN]Cow Digit Game S(sg函数)

已知 1~9 处于必胜的状态,如果一个位置处于 P态(必败),那么他的下一个状态全为 N 态(必胜) 如果一个位置处于 N 态(必胜),那么他的下一个状态至少有一个 P 态(必败)​​​​​​​预处理所有的状态即可const int N=1e6+5; int n,m; int i,j,k; int sg[N]; //bool vis[N];void getSG(){ for(int i=1;i<10;i++) sg[i]=1;...

2021-02-28 11:27:00 39

原创 HDU 1848 Fibonacci again and again(nim游戏+sg函数)

const int N=1e3+5; int n,m; int i,j,k; int sg[N]; bool vis[N]; const int fibo[15]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987};void getSG(){ for(int i=1;i<N;i++){ ms(vis,0); for(int j=0;j<15 && i-fibo[j]>...

2021-02-27 23:13:54 24

原创 HDU 1846 Brave Game(SG函数)

const int N=1e3+5; int n,m; int i,j,k; int sg[N]; bool vis[N];void getSG(){ ms(sg,0); for(int i=1;i<=n;i++){ ms(vis,0); for(int j=1;j<=m && i-j>=0;j++){ vis[sg[i-j]]=1; //将之前访问过的 sg 所代表的整数标记 } for(int j...

2021-02-27 23:02:06 38

原创 洛谷 P2261 [CQOI2007]余数求和(整除分块)

利用整除分块可以解决后面的求和部分,但是需要注意:k!=n,若,则,所以 是的最终位置,其不可以超过 nll go(ll n){ return n*(n+1)/2; }int main(){ while(~sdd(n,k)){ ll ans=(ll)n*k; for(ll l=1,r;l<=n;l=r+1){ if(k/l) r=min(k/(k/l),(ll)n); els...

2021-02-27 11:39:15 35

原创 洛谷 P4281 [AHOI2008]紧急集合 / 聚会(树剖+lca)

如果有两个点,那么最短的位置一定是两点中的 lca,此时有三个点,我们观察 6 3 1 这组询问,如上图所示:最后的答案为 2,也就是 3 6 的 lca,不妨可以猜测,最后的位置一定是在某两点的 lca 处,所以枚举即可代码并没有采用倍增,而是采用树剖来处理 lcaconst int N=5e5+5; int n,m; int i,j,k; int a[N]; vector<int> G[N];int dep[N],fa...

2021-02-27 10:10:15 39

原创 牛客练习赛77 小G的约数(整除分块)

ll go(ll n){ return n*(n+1)/2;}ll G(int n){ ll ans=0; for(ll l=1,r;l<=n;l=r+1){ r=n/(n/l); ans+=(go(r)-go(l-1))*(n/l); } return ans;}int main(){ while(~sd(n)){ pll(G(G(n))); }}

2021-02-26 23:24:24 108

原创 牛客练习赛77 小G的GCD(差分)

观察样例 2 ,可以发现答案为 (3+3+3),对于 k 的倍数:ak,其贡献到 (a+1)k 位置时改变,不由得想到差分的性质const int N=1e6+5; int n,m; int i,j,k; ll a[N];int main(){ while(~sdd(n,k)){ for(int i=k;i<=n;i+=k) a[i]=i; ll ans=0; for(int i=1;i<=n;i++) a[i]+=a[i-1]...

2021-02-26 22:28:55 86

原创 洛谷 P1247 取火柴游戏(nim 游戏)

简单说一下 nim游戏 的博弈原理,先将 a[i] 转化成二进制数,那么题目变成了每一次可以取走任意 a[i] 的 任意个 1sum 是所有 a[i] 的异或值如果 sum=0,说明有偶数个 1,先手拿 x,后手也拿 x,先手必败如果 sum!=0,我们考虑去掉一堆,这 n-1 堆相互异或得到的结果 res,剩下的那一堆为 x,如果 x>res,那么我们考虑将拿掉 x-res,那么剩下的那一堆与其余的 n-1 堆形成异或为 0 的必败局面,可以证明一定存在 x 使得 sum!...

2021-02-26 22:21:01 43

原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 Easy Equation(差分)

const int N=3e6+5; int n,m; int i,j,k; ll g[N],f[N];int main(){ int a,b,c,d; while(~sdd(a,b)){ sdd(c,d); for(int i=0;i<=a;i++) g[i]++,g[i+b+1]--; for(int i=1;i<=a+b;i++) g[i]+=g[i-1]; //i 为 x+y 的方案数 for(int i=0;i<=...

2021-02-25 22:52:18 44 1

原创 牛客练习赛76 CG的通关秘籍(组合数学)

首先暴力解决时枚举 1~n 的全排列,共种方法,现在确定第一个数,而第一个数并不产生贡献设第一个数为 x,那么第二个数产生贡献的情况有两种,要么 y∈ [1,x-1] 产生 2 点贡献,要么 y ∈ [x+1,m] 产生 1 点贡献现在确定 x,y,由于全排列的性质,总共产生贡献为,其值为这样 x,y 确定下来,目前只剩下种排列方法,而每一位的总贡献为,共 n-1 位产生(除 x)所以答案为ll pow_mod(ll a,ll x){ ll ans=1;...

2021-02-25 21:34:02 24

原创 Codeforces Round #701 (Div. 2) D. Multiples and Power Differences(思维+构造)

给出一个矩阵 a,要求构造一个矩阵 b,使得b[i][j] 是 a[i][j] 的倍数 b[i][j] 与其四周相邻的数之间相差的绝对值为,其中 输出 b 矩阵如果题目有思路,那么这道题就是一道水题我们可以想着减少条件限制,如果 b 矩阵中的每个元素为 a 矩阵所有数的倍数的话,那么第一个条件就可以省略了这个数为 a 矩阵中所有数的 lcm 即可,且 lcm 最大为 3*4*5*7*11*13*15但是 b 矩阵所有的数不能全为 lcm,要满足条件 2 ,在相应的...

2021-02-25 16:10:56 30

原创 Codeforces Round #701 (Div. 2) B. Replace and Keep Sorted(推导)

给出长度为 n 的数组,有 q 次询问,以及特殊元素 k,每次询问给出 [l,r] 区间,要求构造一个长度相同的区间,使得构造的区间满足严格递增 有相同的长度 所有的元素都属于 与所询问区间只有一个位置处的元素不同求总共可以构造多少这样的区间对于给定的区间直接暴力统计不就可以了吗,代码如下:for(int i=x;i<=y;i++){ if(i==x) ans+=a[i+1]-1ll-1; else if(i==y) ans+=1ll*k...

2021-02-25 15:59:08 39

原创 Codeforces Round #701 (Div. 2) C. Floor and Mod(数论)

给出 x,y 使确定,满足且 以上条件的,<a,b> 有几组首先满足上述条件的一定满足,这里大家可以自己排除一下x,y 的范围都很大,要么 ,要么优化至首先妄图打表解决,最终可以发现,其中,所以得到,而这已经很接近的复杂度了放缩一下 ,,所以;最终可以得到 :,这样 k 就可以用来枚举了而 b 同样可以,,所以知道了 k,b 之后 a 便可以求出来,所以只要枚举 k 来统计答案即可int main(){ rus...

2021-02-25 15:44:08 31

原创 UVa10887 Concatenation of Languages(Trie)

Sample Input23 2catdogmouseratbat1 1abccabSample OutputCase 1: 6Case 2: 1有 n 个 A 串,m 个 B 串,问可以组成多少种 AB 串将所有的组合放入字典树中即可,话说为什么会有空串啊喂const int N=2e6+5; int n,m; int i,j,k; int t[N][26],tot=0; int vis[N]; cha...

2021-02-24 18:01:04 21

原创 LightOJ 1269 Consecutive Sum(Trie+贪心)

Little Jimmy is learning how to add integers. As in decimal the digits are 0 to 9, it makes a bit hard for him to understand the summation of all pair of digits. Since addition of numbers requires the knowledge of adding digits. So, his mother gave him a s

2021-02-24 17:22:05 21

原创 Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP)

给出两个字符串 s 和 t,s 中一定有一个子序列可以构成 t,假设构成 t 的子序列的下标为 ,求对于 t 的每一个字符,都可以找到 s 中最大匹配的位置和最小匹配的位置,找到之后两相邻字符之间的最大距离即为答案const int N=5e5+5; int n,m; int i,j,k; char s[N],t[N]; int l[N],r[N];int main(){ while(~sdd(n,m)){ ss(s+1); s...

2021-02-23 23:17:41 160

原创 Codeforces Round #704 (Div. 2) B. Card Deck(暴力)

给出大小为n 的排列,每次操作从后面开始取,取任意大小为 k 的长度组成一种新的排列,问最后这种排列字典序最大是多少其实很容易发现最优的排列应该类似于 也就是说从后面开始找这几个点,但是不能够保证 n 之后我们要找的点是 n-1 ,因为 n-1 可能已经与 n 组成排列,所以利用一个数组来找到下一个需要找的点是什么即可const int N=5e5+5; int n,m; int i,j,k; int a[N]; bool vis[N...

2021-02-23 21:58:28 197

原创 HDU 1247 Hat’s Words(Trie)

给出多个单词组成单词表,问这些单词中有哪些可以拆成两个单词,并按字典序输出按字典序输出自然要借助 set,对于每一个单词,我们将其正序放入字典树,再将其逆序放入字典树,这样存在两颗字典树对于每一个单词将进行询问,如果可以由两个单词表示,那么一定存在位置x,使得 1~x 为一个单词,x+1~len 为一个单词,只要找是否存在这样的x 即可const int N=5e4+5; int n,m; int i,j,k; int t[N*50][26][2]...

2021-02-23 14:50:36 16

原创 ZOJ 3430 Detect the Virus(AC自动机)

给出 n 个模式串以 base64 编码,再给出 m 个文本串以 base64 编码,问这 m 个文本串中出现过多少次模式串题目若是没有以 base64 编码为条件就是一道 AC自动机的模板题,但是区区一个编码就变成了自闭题首先搞清楚 base64 编码的规则,题目中已经给出了 hello 的样例,就是将 hello 的 acsll 码转化为二进制,然后每 6 位按题目中给出的表进行对字符进行转化,= 忽略即可而题目要求我们求文本串的匹配,自然要将给出的 base64 进行解码,由...

2021-02-23 11:16:48 23 1

原创 洛谷 P1704 寻找最优美做题曲线(二分)

首先要判断必刷题的 k 天是否能成立其次在剩下的天数中找到最长子序列,注意剩下的天数中可能会与必刷题的 k 天产生冲突,所以要有取舍,这里开了一个 vis 数组保存能够统计的天数最后在求最长上升子序列的问题中利用 nlogn 的方法解决const int N=5e5+5; int n,m; int i,j,k; int a[N]; int p[N]; bool vis[N]; int s[N],top=0;void ini...

2021-02-22 23:11:41 24

原创 洛谷 P1663 山(二分)

题目出得比较妙,我们可以思考枚举高度,但是如何判断,根据题目中给出的图,如果 + 的位置向下移动,那么最右边的直线和最左边的直线都无法看到,这就是题目的突破口在 check 函数中,对于高度 h,根据每条直线的斜率枚举 h 可以出现 x 轴上的范围,判断是否可行,灯光与直线平行时题目默认是可以的const int N=5e4+5; int n,m; int i,j,k; double x[N],y[N]; double a[N],b[N];...

2021-02-22 22:11:18 19

原创 洛谷 P3041 [USACO12JAN]Video Game G(AC自动机+DP)

题目不难想到要应用 DP,建好 AC自动机之后dp[i][j] 表示到第i 个字符标号为j 的节点时最大的连击数是多少dp 方程也不难想由于本人实力欠缺,dp 数组的初始化为什么要设为 -1 没想明白,先给自己挖个坑 QAQconst int N=300+5; int n,m; int i,j,k; char s[N]; int t[N][3],tot=0; int vis[N],f[N]; int dp[(int)1e3+5...

2021-02-22 21:20:12 21

原创 HDU 3065 && 多校2009 病毒侵袭持续中(AC自动机)

AC自动机 构建完之后,由于特征码都不相同,所以沿着失配边走逐个统计即可注意有多组输入const int N=1e5+5; int n,m; int i,j,k; char s[(int)1e3+5][55]; int tot=0,t[N][128]; int vis[N],f[N]; int ans[N]; char ch[(int)2e6+5];void insert(char *s,int id){ int r...

2021-02-21 11:19:14 40 2

原创 HDU2896 && 多校2009 病毒侵袭(AC自动机)

利用 ac自动机 将源码字符串中出现的特征码找出来,用 set 存储即可const int N=1e5+5; int n,m; int i,j,k; char s[N]; int tot=0,t[N][128]; int vis[N],f[N]; set<int> all;void insert(char *s,int id){ int rt=0; for(int i=0;s[i];i++){ ...

2021-02-21 10:19:56 36

原创 Codeforces Round #703 (Div. 2) B. Eastern Exhibition(思维)

NoteHere are the images for the example test cases. Blue dots stand for the houses, green — possible positions for the exhibition.First test case.Second test case.Third test case.Fourth test case.Fifth test case.Sixt...

2021-02-19 22:04:49 42

原创 Codeforces Round #703 (Div. 2) D - Max Median(二分+思维)

有 n 个数,在长度>=k 的任意子区间内寻找其中位数,使得这个中位数最大记得洛谷上有一个题是主席树+二分用到的一个芝士我们二分枚举答案 x,大于等于 x 的数记为 1,小于 x 的数记为 -1,若有任意一个长度 >=k 的子区间满足和为正数,那么 x 可以记为最小答案这里可能会有疑惑,枚举的 x 不存在于原数组内该怎么办?例如在 5 1 4 2 6 中查找 3 (3 此时是要查找的中位数),虽然此时 3 为答案,但是 3 并不是最后的答案而二分单调性的证明:...

2021-02-19 17:33:45 35

原创 POJ 1816 Wild Words(Trie+DFS)

题目比较毒瘤给出 n 个模式串,m 个单词,查询每一个单词与哪一个模式串匹配,其中 ?可以表示任意一个单词,* 可以表示为 空或者任意多个单词一看到这个题不应该向 AC 自动机考虑吗?发现题目中单词的数目不多,且单词的长度很小,故在查询的时候采用暴力的方式,先利用模式串建好字典树在查询过程中利用 dfs 的方式,但是要注意的是遇到 * 之后,由于其可以为空,所以单词的长度可以不再增加,当然也可以表示剩余的所有字母但是这样还是不对,在 dfs 过程中不可以 return:...

2021-02-19 16:02:12 26

原创 洛谷 P3796 【模板】AC自动机(加强版)

题目要求出现最多的模式串及次数,我们目前可以利用 AC 自动机找到一个东西,那就是模式串这样不就好解决了吗?利用一个数组存取每一个模式串的出现次数,最后在统计一边就可以了const int N=1e6+5; int n,m; int i,j,k; char s[N]; int f[N]; int t[N][26],tot=0; int vis[N]; char ch[155][75]; int ans[N];int ...

2021-02-18 22:07:49 25

原创 洛谷 P3808 【模板】AC自动机(简单版)

AC 自动机模板题不做详细解释,但是强调几个代码中需要注意到的地方AC 自动机第一步利用字典树将模式串放入树中 第二步利用 BFS 构建 fail 指针,构造 fail 指针时需要注意,构建节点 u(x代表节点 u 中的字母)的 fail 指针时,是在其父节点位置时构造的,当 x存在时,其 fail 指针指向其父节点 fail 指针中的 x节点;而当 x不存在时,只要将 u 指向其父节点 fail 指针中的 x节点,这样可以在后续查找当中从字典树的底部跳到树顶(不明白...

2021-02-18 20:42:56 23

原创 POJ 2408 Anagram Groups(Trie+思维)

给出多个单词,每个单词的长度没说(差评),每个单词只要所有的字母相同可以认为是同一个单词,将所有的同一个单词放入集合中,输出前 5 个集合数量最大的集合注意:若一个集合中只有一个单词 word,不能说明 word 只出现过一次题目不难,但是处理起来有几个坑点题目可以用 map+set 过,但是常数较大,我们采用字典树,将每一个单词在树上的标记作为桶 将不同的字符串转化为字典序最小的,可以采用快排,这里采用基数排序 可能是 set 里面有 const 修饰的形参,所以 cmp 函数...

2021-02-16 16:43:55 26

原创 Educational Codeforces Round 104 (Rated for Div. 2) B. Cat Cycle(规律)

有两个人走格子,给出格子的数量 n,其中 走,走,当两个人走到同一位置 x 时,由于 B 太年轻了,所以将 x 让给 A,B 到达 x+1,同时两个人都不喜欢走回头路,即 A 从 x 到达 x+1 时,B 不会再走 x,而是到达 x+2若每次直走一个格子,那么经过 k 步后,B 到达那里找规律可以发现当 n 为偶数的时候,两者不会相遇当 n 为奇数的时候,每经历步,B 都会多走一步int main(){ //IOS; rush(){ ...

2021-02-16 14:03:56 194

原创 Educational Codeforces Round 104 (Rated for Div. 2) D. Pythagorean Triples(数学+枚举)

给出数 n,求三个数,且满足的勾股数有多少组与可以解得和由于每个数的范围都是,所以只能枚举 的值,这样复杂度就变为int main(){ //IOS; rush(){ sd(n); int ans=0; for(ll i=1;(i*i-1)/2<=n;i++){ ll a=i,b,c; if((a*a-1)%2) continue;...

2021-02-16 13:54:27 42

原创 Educational Codeforces Round 104 (Rated for Div. 2) C. Minimum Ties(构造+规律)

有 n 支队伍,每两支队伍之间都要进行一场比赛,胜利的队伍得 3 分,失败的队伍不得分,平局各得 1 分,比赛结束后,一共进行场比赛,要求最后所有队伍的得分相同,构造每场比赛的胜利情况x 与 y 比赛 ,x 胜利表示为 1,y 胜利表示为 -1,平局表示为 0一开始忽略平局双方都要得分,但是平局时对最后的结果仍然有影响,打表可以发现当 n 为 4 时,对局分别为1 2 1 1 3 0 1 4 -1 2 3 1 ...

2021-02-16 11:12:29 133 2

原创 POJ 1451 T9(Trie+思维)

DescriptionBackgroundA while ago it was quite cumbersome to create a message for the Short Message Service (SMS) on a mobile phone. This was because you only have nine keys and the alphabet has more than nine letters, so most characters could only be en

2021-02-15 14:36:52 55

原创 LightOJ DNA Prefix(Trie)

Given a set ofnDNA samples, where each sample is a string containing characters from{A, C, G, T}, we are trying to find a subset of samples in the set, where the length of the longest common prefix multiplied by the number of samples in that subset is m...

2021-02-15 12:31:06 25

原创 POJ 3630 Phone List(Trie)

有 t 组测试,每组测试有 n 个 01 字符串,查询每个字符串是否是其他字符串的前缀题目利用字典树应该是可以在插入过程中得出答案const int N=1e5+5; int n,m; int i,j,k; char s[N][15]; int t[N][10]; int sum[N],tot=0;int idx(char ch){ return ch-'0'; }void insert(char *s,int rt){ ...

2021-02-15 10:48:51 23

原创 POJ 2001 Shortest Prefixes(Trie)

给出多组字符串,求每一个字符串可以唯一表示的前缀利用字典树,对于每一个前缀标记出现的次数,遇到前缀出现次数为 1 时返回const int N=2e4+5; int n,m; int i,j,k; char s[N][25]; int t[N][26]; int sum[N],tot=0;int idx(char ch){ return ch-'a'; }void insert(char *s,int rt){ for(...

2021-02-15 10:13:28 25

原创 UVa 11475 Extend to Palindrome(KMP+思维)

Sample InputaaaaabbaamanaplanacanalxyzSample Outputaaaaabbaamanaplanacanalpanamaxyzyx给出一个字符串,将其变为最短的回文串通过观察样例发现每一个字符串都为 \\\\\\A 的形式,其中 A 为回文字符串,计算非回文串的长度并不是很好计算,但是如果知道 A 的长度同样可以解决问题我们将字符串反转 A///////,求 A 的长度,那么将字符串变为 A////////\\\\\\\\...

2021-02-13 09:30:41 27

原创 HDU 3374 String Problem(KMP+最小表示法)

对于给出的每一个字符串,可以将其任意旋转,输出其字典序最小的位置及出现次数,字典序最大的位置以及出现次数出现次数是指:将字符串 s 旋转可以得到的与 s 相等的个数用最小表示法和最大表示法表示出字典序最大和最小的两个个字符串对于出现个数,例如: abcabcab,其生成元为 abc ,n-next[n] 为其长度,但是其包含不完整的生成元 ab,那么出现次数只能为 1#include <iostream>#include <cstdio>#inc...

2021-02-10 16:16:28 28

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的粉丝

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