自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ccpc 2020 QHD重现 E、K

Exam Results 双指针写法 /* *@author spnooyseed */ #pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline") #pragma GCC optimize(3 , "Ofast" , "inline") #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #pragma GCC optimization

2020-10-19 19:04:35 336

原创 问题 H: Get Strong

数据很小,n = 20,这个应该可以直接搜索吧,我没试,我用的是折半搜索+二分+线段树维护区间最值,折半搜索就是先搜前10个,然后搜后10个,搜前10个的时候把每一个结果用一个pair<花费,权值>保存下来,然后按照花费排序,在第二次搜索的时候对于当前ww , vv需要的是一个前面搜索满足条件v<=m - vv的ww的最大值,然后就用一个线段树维护就行 #pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","in.

2020-10-07 11:33:39 233

原创 2019ccpc厦门站G、J

G 、Zayin and Count 这个题,额不算难题。只是有一个需要注意的地方,在对x进行数位dp的时候,0这个数字有可能可以用,但也有可能不可以用。如果可以用,那就正常dp,但如果不可以用的话,比如,如果对x = 23 dp,但是发现数位dp只能处理两位数的,对于2 ,3,啥的都不能处理,所以在dp之后,还要重新特判一下。处理完之后,就是模拟了。 #pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline") #p

2020-09-23 18:51:56 436 1

原创 2020 hdu contest 1 (水题)

自我感觉航电的题目极其经典 Distinct Sub-palindromes Problem Description S is a string of length n. S consists of lowercase English alphabets. Your task is to count the number of different S with the minimum number of distinct sub-palindromes. Sub-palindrome is a palin

2020-07-24 13:03:39 185 1

原创 Three States codeforces

废话 记录一下遇到的第二个01bfs问题,01bfs和bfs的区别在于路径权值只有0和1,这个时候就优先搞权值为0的边,就用双端队列deque存储,如果边权为0,在前面插入,否则的话在后面插入,比正常跑bfs速度快很多 题目链接 https://ac.nowcoder.com/acm/problem/111125 题面 The famous global economic crisis is approaching rapidly, so the states of Berman, Berance and

2020-07-23 10:18:43 115

原创 颓红警

事实证明,小可爱是最可爱的嘤! ——佚名 现在小可爱在颓游戏,但是他遇到了一个问题: 小可爱率领的部队现在面对的是敌军在这一地区的驻军,敌国战争机器的运作很大程度上依赖指挥,所以敌军内部是严明分级的,就是说,全部敌军可以看作一棵树,每只敌军部队(树上每个节点)有其战斗力。你可以对任意敌军部队发动进攻,小可爱的部队有战斗力p,意味着他的每次进攻将使得被进攻的这支部队的战斗力减少p,对上级指挥系统的打击同时会影响其下级部队。具体来说,当他对点i发动进攻,部队i的战力减少p的同时,对于其子树内点j,部队j的战力.

2020-07-22 19:14:11 171

原创 D - Unmerge

D - Unmerge https://codeforces.com/contest/1382/problem/D 这个题目学到了 ,巧妙的用01背包dp解决问题 用两个数组合并,可以发现,如果有一段a[l…r] 小于b[i] , 那么肯定是先拿a[l…r],尽管这一段a[l…r]里面的顺序我们不知道,最坏的就是波峰,一会变大,一会变小,但是他和b的关系是确定的,b[i] >= max(a[l…r]),反过来b[x…y]对a[i],也是这样的关系 例如3 , 1 , 4 ,5 , 2 , 6 这个例

2020-07-22 11:19:31 362

原创 2020牛客多校训练第三场 部分

L 、 Problem L is the Only Lovely Problem #include <iostream> #include <cstdio> #include <algorithm> #include <unordered_map> #include <vector> #include <map> #include <list> #include <queue> #include <cstr

2020-07-20 20:26:09 189

原创 2020牛客多校训练第四场 部分

B、Basic Gcd Problem 此题wa了16次,恶心的我不行 可以发现当前f[x] 肯定是c的幂次,那么就看x最大时c的多少幂次了。再看x和i的gcd,也就相当于x的约数 从上面看出规律,x如果要是最大,会从它的约数里面挑出最大的y,那么这个y也想最大,所以他也会从它的约数里面挑出z x=k∗y=k∗(p∗z)x = k * y = k * (p * z)x=k∗y=k∗(p∗z) 所以也就是最长的上升的,任意两个数都是倍数关系的序列例如1,2,4,8,32,但是发现,这个不需要可以的去求最长了

2020-07-20 19:57:41 271

原创 C - Choosing flowers

C - Choosing flowers 实力不够,经验不足,心态不稳,哎 假设最优策略里面选择了几种买了不止一支,其余的可能只卖了一支,就直接按照a的从大到小买,对于b的贡献,按照b排序,那么b序列的贡献 b[x1]>b[x2]>b[x3]b[x1]>b[x2]>b[x3]b[x1]>b[x2]>b[x3] 既然这样,我还傻着逼脸买后面的,我脑子哎,都直接买第一个就行了,所以就直接最多最多存在一支花买了好多个,其余买一支的就直接按照a的大小买。枚举一下b就行了, #in

2020-07-20 00:00:01 574

原创 2020年牛客多校训练第二场 部分

2020牛客多校训练第二场 出题数 2 — D题(真水题) 和 F题(滑动窗口) D、Duration #include <iostream> #include <cstdio> #include <algorithm> #include <unordered_map> #include <vector> #include <map> #include <list> #include <queue> #incl

2020-07-17 22:19:45 181

原创 牛牛凉衣服

https://ac.nowcoder.com/acm/contest/6220/C 牛牛有n件带水的衣服,干燥衣服有两种方式。 一、是用烘干机,可以每分钟烤干衣服的k滴水。 二、是自然烘干,每分钟衣服会自然烘干1滴水。 烘干机比较小,每次只能放进一件衣服。 注意,使用烘干机的时候,其他衣服仍然可以保持自然烘干状态,现在牛牛想知道最少要多少时间可以把衣服全烘干。 本来想的贪心,代码如下, class Solution { public: /** * 计算最少要多少时间可以把所有

2020-07-17 13:44:17 135

原创 D.树上求和

D.树上求和 给你一棵根为1的有N个节点的树,以及Q次操作。 每次操作诸如: 1 x y:将节点x所在的子树的所有节点的权值加上y 2 x:询问x所在子树的所有节点的权值的平方和,答案模23333后输出 做法倒是好想(但是尽量用结构体数组,不然不好写,原本没有结构体找bug好久,然后又改写的),假设一个点原本是x , 然后加上y , 变大了y * y + 2 * x * y,将一个子树看出dfs序就是一段区间, 那么就是sum += y * y * len + 2 * res * x , len是区间长度,

2020-07-14 23:30:28 197

原创 CF - 1139D - Steps to One

此题学到一招,就是将概率dp转化为DAG图 考虑概率f[],设f[i]表示当前数组的gcd为i是走向gcd为1的期望步数,因为每次可以选择一个数(1 , m) ,添加到结尾,所以相当于每次从当前x点走向gcd(x , k) , 所以从每个点走,都有m条路径,,最后加一个虚点, 连接第一次选择的数,所以答案也就相当于从虚点走向1,只要求从虚点走向第一次选择的点就可, 答案: ans=1+∑1mf[i]mans = 1 + \frac{\sum_{1}^{m}{f[i]}}{m}ans=1+m∑1m​f[i]​

2020-07-12 00:02:04 97

原创 2019-2020 ACM-ICPC, Asia Xuzhou Regional Contest

A - Cat #include <iostream> #include <cstdio> #include <algorithm> #include <unordered_map> #include <vector> #include <map> #include <list> #include <queue> #include <cstring> #include <cstdlib>

2020-07-10 20:59:51 243

原创 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

A、A - Xu Xiake in Henan Province 就直接看有几个不是0的 #include <iostream> #include <cstdio> #include <algorithm> #include <unordered_map> #include <vector> #include <map> #include <list> #include <queue> #include <

2020-07-10 20:49:54 134

原创 Tree-换根dp

https://ac.nowcoder.com/acm/contest/6226/C 、 修修去年种下了一棵树,现在它已经有n个结点了。 修修非常擅长数数,他很快就数出了包含每个点的连通点集的数量。 澜澜也想知道答案,但他不会数数,于是他把问题交给了你。 换根dp 第一遍dfs , 从下到上算贡献 :对于样例中点1的情况,可以发现上述红色框里的,如果在4的子树里, 5 和 6两个点可选可不选 , 一共2 * 2 中情况 , 如果以dp[u] 表示u节点被选中的时候,其字数内选中情况为 dp[u] *=

2020-07-07 23:57:26 166

原创 牛客算法周周练13 B - 病毒感染 换根dp

https://ac.nowcoder.com/acm/contest/6173/B 有一天clccle和rqy走在某个国家的街头上,机智的rqy却发现周围的行人不太对劲,他们嘴里念念有词,说着"sqn tql!",一边漫无目的的行走,clccle也发现了这一点,却惊讶的发觉这种奇怪的病毒会向周围的城市,最终会感染整个国家,因为网络已经崩溃,所以她们忘记了自己所在的城市,她们唯一知道的是这种病毒是从当前她们所在的城市开始传播的,并且这个国家的所有城市到这个城市的距离和最小(所有道路的距离都为1),现在给定聪

2020-06-30 22:18:17 241

原创 多源对多源最短路径

https://ac.nowcoder.com/acm/contest/6116/B 魔方国有n座城市,编号为1\sim n1∼n。城市之间通过n-1条无向道路连接,形成一个树形结构。 在若干年之后,其中p座城市发展成了大都会,道路的数量也增加到了m条。 大都会之间经常有贸易往来,因此,对于每座大都会,请你求出它到离它最近的其它大都会的距离。 蒟蒻第一次见多源对多源最短路,没想到是这种处理方式。 第一步就是按照正常加一个虚点连接所有的大都会,距离为0然后跑一边dijkstra , 同时记录当前这个点距离哪

2020-06-25 13:18:11 481

原创 K Dress as women

https://ac.nowcoder.com/acm/contest/5944/K One day, zyh and fzj are playing a game called Bejeweled, and they have promised the loser would dress as women. The rules are as follows, in a two-dimensional plane, each time one can remove one or multiple colli

2020-06-17 11:51:36 149

原创 E. Johnny and Grandmaster

https://codeforces.com/contest/1362/problem/E 题目意思就是给一个长度为n的序列k , 然后呢要求将这些数分为两个集合A、B,使得两个集合差值的绝对值最小,也就是min⁡∣∑i∈Apk[i]−∑j∈Bpk[j]∣\min|\sum_{i\in A}p^{k[i]} - \sum_{j\in B} p^{k[j]}| min∣i∈A∑​pk[i]−j∈B∑​pk[j]∣ 做法就是将这个题目呢看成P进制表示,pk[i]p^{k[i]}pk[i]也就是第k[i]为上面是

2020-06-05 18:53:02 260

原创 加分二叉树

加分二叉树 数据很小, 肯定考率爆搜 题目连接 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数 若某个子树为主,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。 试求一棵符合中序遍历

2020-06-02 12:45:07 181 1

原创 小V和gcd树

树剖做法:先预处理出来轻重链,然后当修改某一个点的时候,只需要修改同一条链中与当前点相关的边(红色边), 而那些黑色边不需要维护,只需要查询的时候暴力搞一下就好了。 这也就是维护当前点和重儿子点的做法。 树链剖分 #include <iostream> #include <cstdio> #include <algorithm> #include <unordered_map> #include <vector> #include <map.

2020-05-20 21:39:26 813

原创 白魔法师-牛客小白月赛25

对于这个题目,我的做法是换根dp, 因为可以选择将某一个点染成白色(不论之前的点是黑是白) , 做法如下: 将每个点当成根节点, 然后将根节点染成白色, 完全符合题意;; 首先dfs一下, 自底向上,求出每一个点在子树内的白色连通块大小。 然后从上到下开始算对孩子节点的贡献:: 如果当前点是黑色, 那么对儿子节点肯定没有贡献 , 因为上面的所有节点都被这个黑色节点隔开了,下面的节点不能和上面的节点连接; 如果当前节点是白色 : 如果孩子节点是黑色, 那么在第一次dfs的时候,孩子节点肯定对这个父亲节

2020-05-20 21:36:06 248

原创 石头游戏

矩阵乘法-----石头游戏 我做了两个地方的石头游戏, upc Acwing 实际上我是想测试一下数据问题, 我看了网上的代码和题解,,,,,,,发现基本上都是一样的《基本上》 石头游戏在一个 n 行 m 列 (1≤n,m≤8) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数字指明。 操作序列是一个长度不超过6且循环执行、每秒执行一个字符的字符串。 每秒钟,所有格子同时执行各自操作序列里的下一个字符。 序列中的每个字符是以下格式之一: 1、数字0 - 9:表示拿0~9

2020-05-10 12:56:58 403

原创 最小表示法

有N片雪花,每片雪花由六个角组成,每个角都有长度。 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,…,ai,6。 因为雪花的形状是封闭的环形,所以从任何一个角开始顺时针或逆时针往后记录长度,得到的六元组都代表形状相同的雪花。 例如ai,1,ai,2,…,ai,6和ai,2,ai,3,…,ai,6,ai,1就是形状相同的雪花。 ai,1,ai,2,…,ai,6和ai,6,ai...

2020-04-30 13:48:29 143

原创 二维矩阵hash

给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过。 输入格式 第一行四个整数M,N,A,B。 接下来一个M行N列的01矩阵,数字之间没有空格。 接下来一个整数Q。 接下来Q个A行B列的01矩阵,数字之间没有空格。 输出格式 对于每个询问,输出1表示出现过,0表示没有出现过。 数据范围 A≤100,M,N,B...

2020-04-30 13:30:01 276

原创 树上跳跃

题目描述 懒惰的温温今天上班也在偷懒。盯着窗外发呆的温温发现,透过窗户正巧能看到一棵n个节点的树。一棵n个节点的树包含n-1条边,且n个节点是联通的。树上两点之间的距离即两点之间的最短路径包含的边数。 温温瞧见树上有一只灵活的小松鼠正在节点间跳来跳去。观察了很长一段时间之后,温温发现:松鼠每次跳跃,从当前节点可以跳到任何与当前节点距离不超过k的节点。 突发奇想的温温想要知道,如果定义f(u, v)...

2020-04-15 13:10:49 304

原创 lQWyKBUdjd

#include <bits/stdc++.h> using namespace std; int main() { puts("搬家"); return 0 ; }

2020-04-01 16:15:30 96

原创 取最值

参照题解, 但他这个是 凸 的 题目描述 今有一两行n列的长矩阵,其中的数有正有负,均不超出整数的范围。小明想从这个长矩阵中圈出一个“凹”字形(可正可倒),使得这个“凹”字形中的所有数之和尽可能大,请问能达到的最大值是多少? 输入 输入第一行包含一个整数n,即矩阵的列数,n小于1000000。以下两行,每行包含n个数,用来描述这个矩阵。所有数在整数范围内。 输出 输出包含一行一个数,即求出的最...

2020-03-20 18:08:51 266

转载 马拉车算法模板

大佬博客 马拉车用于解决最长回文子串问题,重点是子串,而不是子序列,想了解最长回文子序列的可以看下这篇博客传送门。对于这种问题,当然最简单粗暴的方法就是暴力求解,但太暴力也不好,毕竟会TLE。所以对于求最长回文子串的问题有一种神奇的算法——马拉车算法,神奇就神奇在时间复杂度为O(n)。 我先说一下大概思路,就是用一个Len[i]数组去存第i个位置到mx位置的长度,然后用id记录上一次操作的位置,m...

2020-03-20 14:35:01 611

转载 凸包模板

凸包算法(Graham扫描法)详解 先说下基础知识,不然不好理解后面的东西 两向量的X乘p1(x1,y1),p2(x2,y2) p1Xp2如果小于零则说明 p1在p2的逆时针方向 如果大于零则说明 p1在p2的顺时针方向 struct node{ double x,y; node friend operator -(node a,node b)//对减法符号进行重载 ...

2020-03-17 00:09:00 113

原创 F - Perils in Parallel

类似于差分异或前缀和, 将区间操作连成图, 跑一便 #include <bits/stdc++.h> using namespace std ; const int N = 2e5 + 10 ; int a[N] , b[N] , c[N] , d[N] ; int n , m ; int h[N * 2] , ne[N * 2] , e[N * 2] , w[N * 2] , vi...

2020-03-13 23:55:03 161

原创 F. Maximum White Subtree 树形dp*换根

大佬博客 #include <bits/stdc++.h> using namespace std ; const int N = 2e5 + 10 ; int ans[N] , a[N] , dp[N] ; vector<int> v[N] ; int dfs(int u , int fa) { dp[u] = a[u] ; for(auto x : v[u])...

2020-03-13 23:46:11 122

原创 D - Manga Market 思维加01背包

Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 并且, 其中的a如果不等于0 , 那么肯定a >= 1 , 如果在t 时间访问完ai 那么下一个访问完花费时间是 ( t + 1 ) * aj + bj + t , 这就相当于两倍的t还多 , 照这样加些去, 会变成4t ...

2020-03-09 18:37:52 181

原创 E - Divisible Substring AtCoder Beginner Contest 158

abcd % p = ( a * 1000 % p + b * 100 % p + c * 10 % p + d * 1 % p ) % p #include <bits/stdc++.h> using namespace std ; int a[10100] ; int main() { int n , m ; string s ; cin >> n &g...

2020-03-08 12:42:15 418

原创 两圆相交板子

vector<Pair> calc(double x1 , double y1 , double r1 , double x2 , double y2 , double r2) { x1-=x2,y1-=y2; double S=x1*x1+y1*y1,a=(S+r2*r2-r1*r1)/2,D=S*r2*r2-a*a; if(D<0) return {}; d...

2020-03-06 22:51:31 125

原创 高精度求组合数

#include <iostream> #include <vector> using namespace std; const int N = 5500 ; int prime[N] , sum[N] , tot; bool st[N]; void get_prime(int n) { for(int i = 2;i <= n;i ++) { ...

2020-03-06 15:25:25 502

原创 lucass定理

#include<iostream> using namespace std; typedef long long LL; int n,p; int qmi(int a,int k) { int res=1; while(k) { if(k&1) res=(LL)res*a%p; a=(LL)a*a%p; ...

2020-03-06 15:24:46 141

原创 康托展开与康托逆展开

#include <bits/stdc++.h> using namespace std ; //返回数组a中当下顺序的康拖映射 typedef unsigned long long ll ; ll b[30] ; //对前 10 个自然数(0 ~ 9)的阶乘存入表 //以免去对其额外的计算 ll fact[22] ; /** * @brief 康拓展开 * * @param[i...

2020-03-06 15:11:04 115

空空如也

空空如也

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

TA关注的人

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