- 博客(27)
- 收藏
- 关注
原创 2018icpc南京E - Eva and Euro coins
https://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjing-regional-contest-en.pdf 题意:给你两个01串,然后连续k个0可以翻转为1,连续k个1可以翻转为0.问你这两个01串是否可以变成相同的串 题解:我们假设k为4 那么10000可以变为11111 再变为00001 所以如果有连续k个相同字符的子串 可以将它移到最前面 或者直接消去 判断剩余字符串是否相等 用两个
2021-05-05 23:25:11
235
原创 2019icpc徐州E题Multiply(pollard_rho)
https://nanti.jisuanke.com/t/42544 pollard_rho板子 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 7; ll x, y, a[N]; ll t,n; ll max_factor; struct BigIntegerFactor { const static int N = 1e6 + 7; ll prime[
2021-05-01 16:24:19
220
原创 leetcode4. 寻找两个正序数组的中位数
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 数据范围很小 可以直接排序nlogn过 还在想为什么是hard= = On的想法就是两个指针扫 也不难 logn想法也不难 就是二分 但是边界问题鲨我 调了半天 给爷调吐了 因为给的是有序序列 如果要找第k个数字的话 可以每个序列取第k/2数字比较 较小的那个是没有可能成为第k个数字的 所以可以排除掉 不断排除 不断移动指针 便可以求出答案 class Solution { publi
2021-04-26 00:13:55
131
原创 leetcode5. 最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/ 一个dp题 有个坑点 是从小的字符串转移到大的字符串 所以循环的时候不能直接遍历两层字符串 需要第一层为长度 才能从小到大遍历 否则会有无法更新的情况 习惯用马拉车算法 竟然连dp都不会写了 class Solution { public: string longestPalindrome(string s) { int dp[1050][1050];
2021-04-26 00:07:35
92
原创 树的直径
树上直径求法 void dfs(int u,int fa,int s) { if(s>maxm){ maxm=s; st=u; } for(int i=head[u];i;i=e[i].nxt){ int v=e[i].to; if(v!=fa){ dfs(v,u,s+1); } } } dfs(1,0,0)之后dfs(st,0,0) dfs的中途可以维护关系 ...
2021-03-20 00:21:51
168
1
原创 CSU2021寒假结训比赛
已经习惯被吊打了.jpg A A题经典spfa判环 没什么说的 这数据量dfs也能做? 惊了 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1978 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define endl '\n' int n,m; double mpa[550][550]; d.
2021-03-15 15:11:44
199
原创 Codeforces Round #703 (Div. 2)D. Max Median(二分)
题目 大意:给出一组序列 让求出一组子序列 其中位数的值最大 且长度不小于k 问中位数最大值为多少 思路:看到最大值 首先想二分 二分中位数的值 那么如何判断是否符合呢 首先我们观察中位数 假如中位数的值为a 那么可以发现大于等于a的数值的数量一定会大于小于a的数量 才会满足中位数为a 那么我们可以假定大于等于中位数的值为1 小于的为-1 用前缀和来维护最值 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll
2021-02-19 15:00:04
342
1
原创 interval GCD(线段树+差分)
题目 大意:两个操作 一个操作是区间加上d 另一个是求区间的GCD 思路:首先如果区间修改使用lazytag的话 难以维护GCD 可以用数学性质gcd(x,y,z)=gcd(x,y-x,z-y) 使用差分 来将区间修改改为两个单点修改 只需要将b[l]+=d b[r+1]-=d 再维护一下gcd即可 query是为了求得区间gcd queryy是为了将差分数组复原为原值 即第一个数x 再做gcd 记得要用ll 还有一个坑点:小心越界 if(y+1<=n) change(1,y+1,-z); 代码:
2021-02-18 14:36:06
420
原创 CSU_WJJJ的ACM板子(持续更新)
我的ACM板子 基础算法 二分 // 满足ok(x)的最小x int l=1,r=n; while(l<r){ int mid=l+r>>1; if(ok(mid)){ r=mid; }else{ l=mid+1; } } // 满足ok(x)的最大x int l=1,r=n; while(l<r){ int mid=l+r+1>>1; if(ok(mid)){ l=mid;
2021-01-28 16:47:23
550
原创 树上启发式合并学习笔记
洛谷日报 例题 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define endl '\n' struct edge{ int nxt,to; }e[200050]; ll col[100050],cnt[100050],ans[100050],sum,mx; int head[100050],a[100050],ct,sz[100050],son[1
2021-01-27 22:42:05
175
原创 并查集的一些理解
从最基本的并查集之后引申到带权并查集 抽象出种类并查集 实际上都是维护一个又一个集合之间的关系 并查集主要写两个函数find和merge find函数可以写成路径压缩 或者 按秩合并 或者两个同时写(但一般单独的路径压缩就可以了) find函数需要注意的是在find函数内维护数组 需要等回溯时再维护 否则父节点还没被维护 先维护了子节点 便出现错误 merge函数比较简单 就是将一个树根指向另外一个树根 也有需要注意的地方 当判断两个点之间的权值时 需要的是这两个点的值 不要写成两点的树根的值 带权并查集或
2021-01-24 20:42:04
215
1
原创 acwing238 银河英雄传说(带权并查集)
https://www.acwing.com/problem/content/description/240/ 一个简单的带权并查集都写歪了= =我是真的菜 题挺简单 大致讲下带权并查集做法 主要就是修改find和merge函数 加入边权数组来维护 一个坑点: int find(int x){ if(x==fa[x]) return x; int rt=find(fa[x]); d[x]+=d[fa[x]]; return fa[x]=rt; } int find(int x){
2021-01-24 15:37:36
209
1
原创 算法竞赛进阶指南学习笔记(2)
0x10 基本数据结构 0x11 栈 对顶栈 创建两个栈 来动态维护序列中间的操作 类似对顶堆的思想 单调栈 栈内元素始终单调 排除不可能的选项 时间复杂度为O(N) 例题 0x12 队列 queue deque 单调队列 单调队列总不会写= =记得常练 cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } int head=1,tail=0; for(int i=1;i<=n;i++){ while(head<
2021-01-23 11:03:54
209
2
原创 HDU - 6166 Senior Pan
https://vjudge.net/problem/HDU-6166 题意:给你n个点 m条有向边 之后挑出特定的k个点 问这k个点中的最小距离为多少 思路:这道题思路很巧妙 将k个点分为两组 一组为源点 一组为汇点 那么应该怎么分呢 这个地方需要二进制分组(我也是第一次见) 因为每个数在二进制下一定有一位不同 例如1=0001 3=0011 所以对二进制分组可以保证任意两个点都会分配到不同的组至少一次 之后便是多源最短路 有一个坑点 因为是有向图 所以v0到v1跑一次最短路 v1到v0也要跑一次 dij
2021-01-22 11:08:43
122
原创 CF1474C Array Destruction
https://codeforces.com/problemset/problem/1474/C 一些芝士:set/multiset可以自动排序 迭代器的下一个或上一个分别用next和prev获取 如int temp=*prev(s.end()); 一个坑点:erase删除所有指向的元素 如果只是想删除一个可以这么写s.erase(s.find(temp)); 思路大概是 首先排个序 每次操作剩下数组的最大值一定是下次操作的temp 用上次操作的mx减去现在的mx 如果存在这个数 就继续操作 操作n-1次
2021-01-20 15:23:07
169
原创 算法竞赛进阶指南学习笔记(1)
0x00 基本算法 0x01 位运算 0xFF代表-1 0x7F代表127 发生算术溢出时,32位无符号整数相当于自动对2322^{32}232取模 当n为偶数时,n xor 1等于n+1 当n为奇数时,n xor 1等于n-1 这一性质经常用于图论邻接表中边集的存储,可以通过xor 1的运算获得与当前边相反的边 lowbit(n)定义为非负整数n在二进制表示下“最低位1及其后边所有的0”构成的数值 lowbit(n)=n&(-n) 0x02 递推与递归 无 0x03 前缀和与差分 前缀和与差分是一
2020-12-23 17:30:33
312
原创 洛谷P1119 灾后重建(floyd新的理解)
https://www.luogu.com.cn/problem/P1119 for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; //核心代码,仅仅只有5行 这段代码的基本思想就是:最开始只允许经过
2020-11-29 19:32:52
217
原创 UNCTF writeup(web/misc)
web web一共六题= =还有一题是找dh嫖的payload 我还是太菜了.jpg easy_ssrf payload:?url=unctf.com/…/…/…/…/flag easy_unserialize 这个题没有懂= =嫖的dh的 待补 payload:?1=“challengechallengechallengechallengechallengechallengechallengechallenge”;s:8:“password”;s:4:“easy”;}aaa babyeval 一顿乱搞 感
2020-11-14 20:03:18
412
原创 用bs4和csv爬取豆瓣电影top250
import requests # 引用requests库 from bs4 import BeautifulSoup import csv # 引用BeautifulSoup库 url = 'https://movie.douban.com/top250' headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 S
2020-07-03 20:40:22
639
原创 CF1364C C. Ehab and Prefix MEXs
Question 给你序列a 让你求出序列b 满足以下式子: 序列b1~bi中未出现的最小非负整数为ai 如:input 1 2 3 output 0 1 2 Solution 首先考虑不存在答案的情况 如果a[i-1]>a[i]的话 那么不存在 但题目保证了a[i-1]<=a[i]所以可以排除 那么可以确定 一定会存在答案 其次考虑怎么处理出答案 每对a[i-1]和a[i]可以分为两种情况: 当a[i-1]==a[i]时 由于a[i-1]已经保证了前面的所有数都取过 那么a[i]应该去取接下来
2020-06-14 21:27:49
237
原创 CF1353D Constructing the Array(优先队列)
Question 给你一个长度为n的全为0的序列,让你从1-n填数,填的位置为找出最长的0序列,如序列长度为奇数,则为(l+r)/2,为偶数,则为(l+r-1)/2 Solution 运用优先队列,将[l,mid-1],[mid,r]push进去,运用重载运算符排序 Code #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cm
2020-06-11 11:23:23
224
原创 CF1353E K-periodic Garland(贪心/dp)
Question 有n盏灯,0代表暗,1代表亮,相邻两个1之间为周期k,求出最少的改变次数 Solution First 贪心方法 详见博客https://blog.csdn.net/cheng__yu_/article/details/106145027 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #i
2020-06-11 11:22:00
206
原创 洛谷P2822 组合数问题(二维前缀和+组合数)
Question Solution 杨辉三角 将组合数打表得出 c[0][0]=1; c[1][0]=1; c[1][1]=1; for(int i=2;i<=2000;i++){ c[i][0]=1; for(int j=1;j<=i;j++){ c[i][j]=(c[i-1][j-1]+c[i-1][j])%k; } } 加上二维前缀和的公式后 for(int i=2;i<=2000;i++){ c[i][0]=1; for(int j=1;j<=i;j++){
2020-06-11 11:20:28
239
原创 CF1340B Nastya and Scoreboard(暴搜剪枝/dp)
Question 一个n个数码位的分数板,每一个数码位都是一个七段数码管,现在给出每个数码位的显示情况,问再点亮k段数码管的话能显示的最大的数是多少,如果不能构成一串数字,就输出-1 Solution First 暴力搜索+剪枝(貌似中间用了一些记忆化搜索的思想? 我不太懂 反正别人这么写的 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #includ
2020-06-11 11:17:28
220
原创 CF1299A Anu Has a Function(位运算+贪心)
Question 有一种操作f(x,y)=(x|y)−y,给你一个序列a1,a2,…,an。 让你改变一下序列a的顺序,让f(f(…f(f(a1,a2),a3),…,an−1),an)最大。 Solution 一些我不会的芝士: (1)int为32位 31位为绝对值 第32位为符号表正负 (2)<<右移 可以取高位 &与运算 可以用&1来判断当前为是否为1,同时也可以用来判断奇偶 解题: 我们可以发现 如果该序列的某一位出现2次及以上的1 该位将变为0 出现0次也显然为0 那么我
2020-06-11 10:49:27
183
原创 Codeforces Round #617 (Div. 3)题解(A-E2)
A题意:可以改变数组中的一个数的值成另外一个数组中的数,问能不能使数组的和是个奇数 思路:数组中有奇数有偶数 || 奇数个奇数 #include <bits/stdc++.h> #define maxn 2005 #pragma GCC optimize(2) using namespace std; typedef long long ll; int t; int a,b; int...
2020-02-08 15:23:14
239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅