自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Devil_Gary的博客

Devil_Gary

  • 博客(30)
  • 收藏
  • 关注

原创 BZOJ4173 数学

好有趣 Orz PoPoQQQn%k+m%k≥k≡⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1∑(n%k+m%k≥k)φ(k)=∑n+mk=1φ(k)∗⌊n+mk⌋−∑nk=1φ(k)∗⌊nk⌋−∑mk=1φ(k)∗⌊mk⌋∑ni=1i=∑ni=1∑k|iφ(k)=∑nk=1φ(k)∗⌊nk⌋φ(n)∗φ(m)∗(∑n+mi=1i−∑ni=1i−∑mi=1i)=φ(n)∗φ(m)∗n∗mn\%k+m\%k

2017-10-31 15:26:02 561

原创 BZOJ4999 树剖+动态开点

表示只会树剖 对于每个新点 动态开线段树就好了 #include<bits/stdc++.h>#define N 100010#define lson l , mid , ls[x]#define rson mid + 1 , r , rs[x]using namespace std;map<int , int> mp;int a[N] , head[N] , to[N << 1] ,

2017-10-31 13:56:10 578

原创 LOJ6226 网络流24题 骑士

这题就是跑个二分图或者最小割 ans=n*n-m-最小割 可以黑白染色 很好想到 上代码#include<bits/stdc++.h>#define inf (~0u>>2)#define cal(i,j) (i-1)*(n)+jusing namespace std;const int N=2e5+5;const int M=2e2+5; int n,m,ans,s,t,cnt,t

2017-10-30 20:12:58 558

原创 LOJ6005 网络流24题

再来一道 短短的 #include<bits/stdc++.h>#define inf ~0u>>2using namespace std;const int N=1e3+5;int n,ans,ans2,ans3,s,t,tot=1;int head[N],dis[N],cur[N],a[N],f[N];struct Egde{ int v,nxt,w;}e[N*2];q

2017-10-30 20:11:21 581

原创 LOJ6004 网络流24题

听zjq大爷说noip要考网络流 吓得切了几道 都是很裸的 虽然跑的慢 但是挺短的 using namespace std;const int N=205;int n,m,sum,le;int mp[N][N],fr[N],vis[N],in[N],fa[N];vector <int > path[N];int get(int x) { return x==fa[x]?x:fa

2017-10-30 20:10:19 592

原创 BZOJ4580 DP

好神奇的DP 题意 给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个,问最大能合出多少设f[i][x]表示由i结尾 合成2^x 的开头在哪里 转移很好想#include<bits/stdc++.h>#define N 300010 using namespace std; int n,ans,f[N][61]; inline int read(){ int x=

2017-10-26 15:46:26 558

原创 BZOJ3503

很裸的高斯消元解异或方程 学了高斯消元之后一直没用过 这次算复习了一下 对于 (i,j) 有(i,j)^(i-1,j)^(i+1,j)^(i,j-1)^(i,j+1)=0 总共 nm个式子 高斯消元解出来就好 因为不能全是零 所以自由元直接赋值1#include<bits/stdc++.h>using namespace std;const int N=100000+5;int n,m,c

2017-10-26 15:19:22 2568

原创 BZOJ2789 逆序对

每个字母在的最终位置都是确定的 求得它以后就是很简(e)单(xin)的求逆序对的个数了 感觉理解深了很多#include<bits/stdc++.h>#define N 1000010using namespace std;char s[N];int tot[27],tot2[27];int a[N],b[N],c[N];int n;void change(int x,int v){

2017-10-24 17:03:48 578

转载 BZOJ1700 DP

好几天没写 一直頽 看到这道题的DP很经典 状态函数f[i][j]=解答前i个problem且最后一次连续进行j个problem的解答所需要的最小月数状态转移方程:   1.在前i~j件事情付清尾款当月付j个项目的首款:d[i][j]=min{d[i-j][x]+1 | sumb[j-1-x+1][j-1]+suma[j][i]<=pay}   2.在前i~j件事情付清尾款后的一个月付j

2017-10-24 08:51:10 461

原创 BZOJ4592 线段树

这个题有毒 我调了3个小时 各种奇葩错 (还是我太菜了) 这题就线段树维护一个区间1的个数 0的个数 左端最长连续0 右端最长连续0 区间内最长连续0 转移的思路还是很好想的 对于那个补脑洞的操作(明明脑洞越来越多) 二分一下 再区间修改 还是得多码 (我学了假的线段树 常数大到离谱)#include<bits/stdc++.h>using namespace std;const int

2017-10-21 09:52:38 523

原创 BZOJ1076 状压+期望

又来一道期望 我又一次没看数据范围 怎么想都觉得不可做啊 结果n<=15(沃尼玛) 言归正传 这题有很多无效状态 所以我们考虑倒着做 这样就可以保证从有效状态转移到有效状态 f[i][p]表示第i轮取到p这个状态期望得分 转移见代码 #include<bits/stdc++.h>using namespace std;double f[101][65536];int N,K;int v

2017-10-20 15:27:02 541

原创 BZOJ3036 期望DP

我期望一直渣的不行 这道题怕是太水了 一开始想着拓扑序一下 然后倒着转移 然后发现直接dfs就是了 直接看代码 很好懂 #include<bits/stdc++.h>using namespace std;const int N=1e5+5;int n,m,tot=1,out[N],head[N];double dis[N];bool vis[N];struct Edge{ i

2017-10-20 14:50:46 454

原创 BZOJ2462 二维hash

这题挺裸的 想着是hash做 但是还不会二维的 搜了份题解现场学习了一发大佬代码#include<bits/stdc++.h>#define MAX 1100 using namespace std; const unsigned int BASE1 = 10016957; const unsigned int BASE2 = 10016957; const int MO = 99

2017-10-20 14:36:02 526

原创 BZOJ2759 hash

这题思路挺神 循环节一定是长度的约数 && i是[l,r]这一段的循环节的充要条件是[l,r-i]和[l+i,r]相匹配 那么很明显可以hash 还有就是要存一下这一段每个字符的个数 循环节一定是gcd(k,cnt) k为每个字母的个数 cnt为当前的得到的gcd cnt的初值为r-l+1 可恶的是cout居然RE贴代码#include<bits/stdc++.h>#define mod

2017-10-20 14:33:02 510

原创 BZOJ4719 &&NOIP2016 天天爱跑酷

这道题还是蛮有趣的 把每一个询问的链拆成s->lca 和lca->t 然后tarjan或者倍增求lca都可过(我的tarjan写丑了) 具体写法见大佬博客我就放份代码 在联系新的代码风格#include<bits/stdc++.h>using namespace std;const int N=3e5+5;int n,m,tot=1,cnt=1;int a[N],head[N],f[N],d

2017-10-20 10:37:25 557

原创 BZOJ1342 单调队列

两个单调队列 一个递减一个递增 做的时候如果当前点-队首大于m l++ 这样就保证了区间长度为m #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 1001000#define inf 0x3f3f3f3fusing namespace std;int id1[N],

2017-10-18 20:29:05 770

原创 BZOJ1746 DP

这个题挺好想 转移好麻烦 F[I][J][1…4] 表示当前序列第i列放j块覆盖情况位1…4的最小面积 情况 1 只有上端覆盖 2 只有下端 3 上下由一块一起覆盖 4 上下由不同覆盖 (要先离散化)#include<bits/stdc++.h>using namespace std;const int N=1e3+5;inline

2017-10-18 14:24:52 534

转载 BZOJ3907

题解是粘的 代码也是粘的转自这里(0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应(0,0)->(n,m)的一条不合法路径(y>x). 所以答案就是C(n,n+m) - C(n+1,n+m).高精度算就OK了#include<cstring>#include<al

2017-10-18 08:57:06 942

原创 BZOJ2396 随机化

直接乘n3肯定GG 考虑建立一个新的1*n的矩阵R A*B*R=C*R R随机化 最后几乎一样就是成立的#include<bits/stdc++.h>using namespace std;int n;int a[1001][1001],b[1001][1001],c[1001][1001];int rnd[1001],ans1[1001],ans2[1001]; void mmul(i

2017-10-17 19:57:39 516

原创 BZOJ4264 边集哈希

刚学会 每个点随机一个值 对一个点把他连得所有点权值异或 找相同就好了#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=1e6+5;ll n,m,ans;ll h[N],g[N],a[N]; inline int read(){ int x=0,f=1;char ch=getch

2017-10-17 19:53:41 526

转载 BZOJ1426 玄学概率DP

我是看不懂啊 直接粘dalao的 链接【题目链接】 参考【pygbingshen的题解】,推了一晚上终于推出来了。 注意题意指的是,第i次买的时候价钱为i,不是编号为i的邮票价钱为i(否则样例应该是11…)。设g[i]表示已经收集了i张邮票,要收集到n张邮票的期望购买次数。 设pr(x, i)表示已经收集了i张邮票,购买x次能收集到n张邮票的概率。 那么根据g[i]定义,有(pr(x,

2017-10-17 18:15:38 556

原创 BZOJ3697 点分治

很裸的点分治 把权值0改为-1 记录一下重心到某点的权值和 用f[i][0…1],g[i][0…1]分别表示前面几个子树以及当前子树和为i的路径数目,0和1用于区分路径上是否存在前缀和为i的节点。那么当前子树的贡献就是f[0][0] * g[0][0] + Σf [i][0] * g [-i][1] + f[i][1] * g[-i][0] + f[i][1] * g[-i][1],其中i的范围

2017-10-17 17:28:44 287 2

原创 51NOD 1615

还是暴力 从1开始一直加 要是比n大了 做差看是不是偶数 偶数的话就直接输出 不然就继续加 证明的话 如果差△s是偶数的话 就在之前的+(△s/2)变成-(△s/2) 很好想#include<bits/stdc++.h>#define ll long long/*char *TT,*mo,but[(1<<15)+2];#define getchar() ((TT==mo&&(mo=(TT=b

2017-10-17 16:16:15 227 1

原创 51NOD 1419

很显然最小公倍数 n为偶数是n-1*n-2 *n-3和n*n-1*n-3的最小公倍数取max 奇数就是n-1*n-2 *n-3 特判1 2就好了#include<bits/stdc++.h>#define ll long long/*char *TT,*mo,but[(1<<15)+2];#define getchar() ((TT==mo&&(mo=(TT=but)+fread(but,1

2017-10-17 16:13:57 215 1

原创 BZOJ1734 二分

二分距离 水题#include<bits/stdc++.h>using namespace std; int x[100001]; int main() { int n,c; scanf("%d%d",&n,&c); int i; for(i=1;i<=n;i++) scanf("%d",&x[i]);

2017-10-16 15:19:44 526

原创 BZOJ3673 可持久并查集

可以用线段树维护 每个叶子结点存它父亲的位置 查一个点的父亲和正常并查集差不多 记录每个点的深度 当要相连的两个点深度相同时 (p,q) 把q的deep++ 整体用主席树维护 copy hzwer的 Orz#include<cstdio>#include<iostream>using namespace std;inline int read(){ int x=0;char

2017-10-16 15:14:54 558

原创 BZOJ4245 二进制贪心

对于第i位 只有每段第i位都为0 结果才为0 所以要最小的话 从最高位开始判断是否可以为零 具体的求出前缀xor的值 如果第i位偶数个1 那就可以偶数个分一组 这样最后or的结果是0 在奇数个的位置打上标记 即不能在这里分开(这里分开的话or下来肯定是1) 扫完一遍如果 总标记+m-1<=n 那就有分成m段的方案 每一位这样贪心就能得到最小值#include<bits/stdc++.h>#defi

2017-10-16 14:36:13 629 3

原创 BZOJ3251 暴力

发现只有斐波那契这种形式的数才不能构成三角形 INT范围内只有50多项 所以暴力跑 小于50暴力判断 大于50直接输出YES#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=1e5+5;inline int read(){ int x=0,f=1;char ch=getchar();

2017-10-16 14:28:33 514

原创 BZOJ3126 单调队列DP

记录一下每个位置包含它的区间最左端在哪里还有和他前面的不包含他的区间最右端 然后单调队列跑DP#include<bits/stdc++.h>#define N 200003using namespace std;int n,m,L[N],R[N];int head,tail,q[N],f[N];int main(){ scanf("%d%d",&n,&m); for (i

2017-10-16 14:26:28 628

原创 bzoj题目总结

仓库

2017-10-14 11:41:43 457

空空如也

空空如也

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

TA关注的人

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