自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 AcWing - 337 - 扑克牌 = dp + 组合数学

https://www.acwing.com/problem/content/description/339/感觉非常沙雕的一个东西。首先设状态的时候要按张数来设,这样空间复杂度比较小。因为本身就和花色和面值没有什么关系的。然后在预处理的时候就直接考虑花色的影响,就是乘上一个排列数。记得要容斥一下,不然答案很有问题。不知道为什么我的unsigned long long用不了(原...

2019-09-28 23:23:00 222

转载 AcWing - 338 - 计数问题 = 数位dp

https://www.acwing.com/problem/content/description/340/第一次做这种数数字的个数的,感觉理论上是差不多的,返回的不是1而是他的贡献罢了。按道理要注意0的,但是题目里没有0。0毕竟是很特殊的,他全是前导0但也会贡献1个0。#include<bits/stdc++.h>using namespace std;type...

2019-09-28 15:04:00 268

转载 模板 - 强连通缩点

https://www.acwing.com/problem/content/369/一定要小心缩点之后只剩下一个强连通分量(一个孤立点)的时候,本身就是强连通的了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 1005;const int INF...

2019-09-27 21:23:00 152

转载 模板 - 数位dp

#include<bits/stdc++.h>using namespace std;#define ll long longint a[40];ll dp[40][40][40];ll dfs(int pos, int s1, int s2, bool lead, bool limit) { if(pos == -1) { if(s1 &...

2019-09-27 20:57:00 130

转载 AcWing - 329 - 围栏障碍训练场 = 线段树 + dp

https://www.acwing.com/problem/content/description/331/貌似只能够从下往上反推,从上往下不知道走哪个方向好。每次找出这个平台A下落到哪个平台B,再从B的左右端点向上转移。#include<bits/stdc++.h>using namespace std;typedef long long ll;const i...

2019-09-27 20:16:00 163

转载 AcWing - 339 - 圆形数字 = 数位dp

https://www.acwing.com/problem/content/341/求ab之间的二进制表示0的数量大于等于1的数量的数的个数,注意特判0也是合法。#include<bits/stdc++.h>using namespace std;#define ll long longint a[40];ll dp[40][40][40];ll dfs(i...

2019-09-27 17:11:00 118

转载 模板 - 树状数组

区间加值,区间求和的树状数组,通过差分来实现。并没有线段树那么通用。#include<bits/stdc++.h>using namespace std;typedef long long ll;ll bit[100005];ll bit2[100005];int n;void add(int x, ll v) { for(; x <= n...

2019-09-25 16:47:00 57

转载 AcWing - 312 - 乌龟棋 = dp

https://www.acwing.com/problem/content/314/注意x1<0是用的x2,x3,x4太多,直接break,而超过上界则是用得不够多,要continue。然而会爆空间,仿照滚动数组的方法进行滚动,要注意赋初值(或者直接memset也可以)。#include <bits/stdc++.h>using namespace std;t...

2019-09-24 23:01:00 93

转载 AcWing - 275 - 传纸条 - dp

https://www.acwing.com/problem/content/277/按对角线为阶段,记录x上的状态推断y进行dp,注意两个取值都是n!#include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[55][55];ll dp[105][55][55];int mai...

2019-09-24 22:35:00 97

转载 Southern and Volga Russia Qualifier 2019-2020

A - Yellow Cards给一堆黄牌,给1队、2队的人数和每个人还能吃的黄牌数,求最少和最多罚下去几个人?数据量过小,直接模拟即可,最少就给所有非1的分配完之后,取黄牌数和人数的最小值(貌似题目数据连这个都不卡)。最多就集中火力罚当前承受度最低的。#include <bits/stdc++.h>using namespace std;typedef long ...

2019-09-22 21:00:00 534

转载 2018-2019 ACM-ICPC, Asia Seoul Regional Contest

D - Go Latin签到题,按题意模拟就可以了,容易看漏情况,小心一点。#include<bits/stdc++.h>using namespace std;typedef long long ll; char s[1000005];int main() {#ifdef Yinku freopen("Yinku.in", "r", stdin);...

2019-09-21 23:59:00 337

转载 最长上升子序列

昨天2019年9月20日,学弟问我最长上升子序列怎么复原,这个问题想了很久才知道怎么解决,顺便想清楚了这个算法的本质,他通过二分替换元素的时候是不能更新后面的元素的,而替换的原因是因为他是新元素所以可以放在任何不比他大的元素后面。所以不能更新为f2[f1[j]]而是要f1[j-1]。注意到其实f1在计算结束之后只用来赋个初值,可以接着用。f1[i]表示程度为i的最长上升子序列的最后一个...

2019-09-21 01:26:00 77

转载 计算机图形学初步

华南理工大学 梁宇正老师教的直线段Bresenham扫描转换算法中直线段的两端均为整数,那么这里也同样假设 $c_x, c_y ,r $均为整数。公式推导时需要使用的是与圆心的相对坐标,所以只考虑圆心在原点的情况,其他情况只需要进行一个坐标偏移。在 \([\frac{\pi}{4},\frac{\pi}{2}]\) 的圆弧段中,圆切线的斜率范围为 \([-1,0]\) ,仿照直线段B...

2019-09-19 22:00:00 171

转载 AcWing - 206 - 石头游戏 = 矩阵快速幂

https://www.acwing.com/problem/content/208/因为1~6的最小公倍数是60,所以以60为周期进行快速幂然后剩下的算余项,注意两点:1、递推矩阵永远有这样的形式:A=A*B其中A就是用来把各步的递推结果压缩保存的矩阵(仿照快速幂)2、越界的石子直接消失了,原题没说明要怎么处理3、计算的过程会溢出#include<bits/stdc...

2019-09-18 18:01:00 171

转载 模板 - 扩展大步小步算法

#include<bits/stdc++.h>using namespace std;typedef long long ll;inline int gcd(int a,int b){ if(!b) return a; else{ while(int i=a%b){ a=b; ...

2019-09-18 16:59:00 81

转载 AcWing - 226 - 233矩阵 = 矩阵快速幂

https://www.acwing.com/problem/content/228/要注意类似这种递推的除了用推公式的办法还可以用矩阵快速幂,说不定还会更快,毕竟组合数没有快速的算法。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 10000007;...

2019-09-18 16:54:00 148

转载 AcWing - 208 - 开关问题 = 高斯消元法

https://www.acwing.com/problem/content/210/要注意两点:开关之间的关系不一定是对称的,并且每个开关会控制自己。消元的过程中可以计算出矩阵的秩,假如某个行没有主元但是有常数,那么就直接-1了。#include<bits/stdc++.h>using namespace std;typedef long long ll;co...

2019-09-16 18:36:00 111

转载 AcWing - 197 - 阶乘分解

https://www.acwing.com/problem/content/199/求解n!的质因数分解,n数量级1e6。一个最简单的思路就是暴力分解每个数的质因数,复杂度过高。换一种思路,当需要批量处理的时候,用线性筛求出每个数的最小质因数,然后对这个数进行质因数分解只需要log级别。191ms:#include<bits/stdc++.h>using nam...

2019-09-16 18:05:00 149

转载 AcWing - 225 - 矩阵幂求和

https://www.acwing.com/problem/content/submission/227/需要构造一种新的矩阵,受到前几天xy的求和的启发,但是还是不知道矩阵的求和怎么搞。事实上矩阵的求和是一样的。构造一个矩阵:其中E是单位矩阵,O是零矩阵,那么这个东西转移n次就得到需要的Sn,而A在此过程中自动转移。\[\left[ \begin{matrix} S_...

2019-09-16 17:41:00 220

转载 模板 - 扩展欧几里得算法

inline int gcd(int a,int b){ if(b==0) return a; else{ while(int i=a%b){ a=b; b=i; } return b; }}int ex_gcd(int a,int b,int&a...

2019-09-16 16:59:00 73

转载 The Preliminary Contest for ICPC Asia Shanghai 2019

D. Counting Sequences I暴力搜索。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MOD = 1000000007;map<vector<short>, short> m;vector<short> ...

2019-09-15 23:10:00 114

转载 模板 - 无旋Treap

普通平衡树:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define ls(p) ch[p][0]#define rs(p) ch[p][1]const int MAXN = 100000 + 5;int val[MAXN], ch[MAXN][2], rnd[MAXN], ...

2019-09-13 11:26:00 81

转载 模板 - 最小圆覆盖

#include<bits/stdc++.h>using namespace std;int n;double r;struct point { double x, y;} p[100005], o;inline double sqr(double x) { return x * x; }inline double dis(point a, po...

2019-09-13 11:21:00 73

转载 AcWing - 119 - 袭击 = 平面最近点对

https://www.acwing.com/problem/content/121/给两种点,黑点和红点各n(n<=1e5)个,求最近的黑点和红点之间的距离,xy在1e9范围内。随机旋转法。先sort一遍更新d使得d尽可能变小,然后randomshuffle(实际上貌似只需要randomshuffle其中一个就够了),再更新一边d使得d尽可能变小。然后随机乱旋转一通,根据已...

2019-09-13 10:50:00 147

转载 模板 - 平面最近点对

这个是正确的算法,但是复杂度可能会卡到 \(O(n^2)\) ,加上每个点最多匹配的临近点最多15个/30个限制的话复杂度就可以保证了,最多就再做一次增加正确的几率,我确实不行从头到尾都是随机的怎么有人卡得掉。#include<bits/stdc++.h>using namespace std;const double PI = acos(-1.0);struct...

2019-09-13 09:44:00 82

转载 AcWing - 123 - 士兵 = 贪心

https://www.acwing.com/problem/content/125/一开始觉得很复杂,但是其实和去中点一样,只不过对于x来说要排个序,然后贪心让最近的士兵去他应该去的位置,这样不会更差。所以xy是无关的,总是存在一种办法使得他们不会走到禁止格。直接排序。#include <bits/stdc++.h>using namespace std;typ...

2019-09-13 01:53:00 107

转载 2019牛客暑期多校训练营(第一场)

链接J Fraction Comparision签到题,比较两个分数的大小,但是交叉相乘会导致溢出。那当然是依靠Java去解决啦。只是这个是真的太慢了,跑了差不多1700ms,还费了一大堆内存。package acscut;import java.math.*;import java.util.*;public class Main { public stati...

2019-09-13 00:06:00 54

转载 SCUT - 173 - Pod153的优化问题 = 数学

https://scut.online/p/173给一个大于1的整数n,对它进行分拆,不可以拆出1,拆出的每个数贡献它的最大的除了它自己以外的因子,最小化这个贡献的和。大胆猜测是要分解出一些质数使得大家都是1。本身是2的就直接输出1就可以了。根据哥德巴赫猜想,大于2的偶数直接输出2就可以了。假如是质数,直接输出1就可以了。剩下的都是奇合数了,奇合数至少是9,奇合数都可以拆一个...

2019-09-12 23:34:00 170

转载 AcWing - 96 - 奇怪的汉诺塔 = dp

https://www.acwing.com/problem/content/98/先考虑三个柱子的汉诺塔问题,设d[i]表示在三个柱子都可以选时,把i个塔从一个柱子移动到另一个柱子的最小移动步数。首先把n-1个塔从A移动到B,然后把n从A移动到C,再把n-1个塔从B移动到C。d[i]=2*d[i-1]+1当有四个柱子时,情况稍微改变,设f[i]表示在四个柱子都可以选时,把i个塔从...

2019-09-12 23:15:00 90

转载 AcWing - 145 - 超市 = 贪心

https://www.acwing.com/problem/content/147/有n个商品,商品有价格和过期时间,在过期时间之前才可以卖出,每天只能卖一个。求最大利润。假如直接对过期时间排序然后贪心会WA。事实上先把所有物品按过期时间排序,把商品的价格放进小顶堆里面,检测到一个商品的过期时间<当前堆的大小时,说明现在的时间不够出售所有的商品,就把价格最小的丢掉。为什么这样...

2019-09-12 22:14:00 143

转载 AcWing - 332 - 股票交易 = 单调队列优化dp

https://www.acwing.com/problem/content/334/第一次写单调队列优化的dp,首先朴素的做法不难想到,就是复杂度 \(O(n^3)\) ,然后考虑优化。每天都从 \(pre=max(0,i-w-1)\) 天转移过来就刚刚好了。考虑每个k是怎么更新j的。买入股票:\(dp[i][j]=max\{dp[pre][k]-(j-k)*AP_i\;|\...

2019-09-12 17:48:00 209

转载 unordered_map防止大量哈希冲突

https://codeforces.com/blog/entry/62393?tdsourcetag=s_pcqq_aiomsg貌似听说会有卡unordered_map的,有巨佬给出了解决方案。基于一个随机时间的种子再配上一些奇怪的数字让你的程序抖动得更强。struct custom_hash { static uint64_t splitmix64(uint64_t x)...

2019-09-12 10:11:00 2191

转载 AcWing - 245 - 你能回答这些问题吗 = 线段树

https://www.acwing.com/problem/content/246/一个很有意思的线段树,一般来说要求的最大连续和只需要维护一个从左侧开始/从右侧开始的最大连续和用来跨越区间中点,但是这里居然至少要包含一个元素,所以要进行一些变形。主要是叶子节点里面的各个标记至少要有一个元素。#include <bits/stdc++.h>using namespac...

2019-09-12 01:15:00 74

转载 模板 - CDQ分治

https://nanti.jisuanke.com/t/41356#include <bits/stdc++.h>using namespace std;typedef long long ll;namespace FastIO {#define BUF_SIZE 1000000 bool IOError = 0; inline char Nex...

2019-09-11 19:40:00 101

转载 模板 - 组合数

一般来说只是需要用一个组合数,当MOD大于n和m的时候可以这样求:const ll MOD = 1e9 + 7;const int MAXN = 1e6;ll inv[MAXN + 5], fac[MAXN + 5], invfac[MAXN + 5];void init_C(int n) { inv[1] = 1; for(int i = 2; i <...

2019-09-11 01:21:00 98

转载 模板 - 快速数论变换

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 4e6, mod = 998244353;inline int pow_mod(ll x, int n) { ll res; for(res = 1; n; n >>= 1,...

2019-09-10 22:06:00 156

转载 模板 - 快速傅里叶变换

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 4e6;const double PI = acos(-1.0);struct Complex { double x, y; Complex() {} Complex(doub...

2019-09-10 22:05:00 163

转载 FZU - 2105 - Digits Count - 线段树

http://acm.fzu.edu.cn/problem.php?pid=2105这个是有点东西,分解位操作之后要考虑lazy的影响,假如不顾一切往下PushDown的话要先判断叶子,叶子是不能PushDown的。其次要Build的时候清空lazy。不顾一切先PushDown并不能改变运算符优先级的影响,因为子树也可能有lazy标记。所以当时银川重赛弄的那个是白弄的。#includ...

2019-09-10 17:57:00 87

转载 The Preliminary Contest for ICPC Asia Xuzhou 2019

A What is better?推不出来,写个程序打表,用扩展中国剩余定理合并,居然会溢出longlong,还好不会溢出__int128(赛后exit(-1)测试),实际证明溢出返回-1是不靠谱的,毕竟后面可以又把它搞小了。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef...

2019-09-07 23:08:00 76

转载 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)

这样的圆应该不会太多。1.学会了二分取左右边界的方法,记得要取min和max防止越界。2.学会了一种新的线段树的写法,父节点并不完全包含子节点,相反地,父节点拥有的元素,子节点不会再拥有。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 2e5 + 1...

2019-09-06 22:45:00 394

空空如也

空空如也

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

TA关注的人

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