自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

社会福利公社

Hai capito?

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

原创 poj 3761 Bubble Sort

poj 3761 Bubble Sort找规律发现冒泡排序的轮数与逆序对有关,kk是最大逆序对的个数。 令c(k)c(k)表示最大逆序对小于等于kk的数列个数。 那么c(k)=k!∗(k+1)n−kc(k)=k!∗(k+1)n−k 所求的答案为c(k)−c(k−1)c(k)−c(k−1)#include <cstdio>#define t14 20100713#define ll lon

2017-12-10 20:25:05 297

原创 bzoj 1013 [JSOI2008]球形空间产生器sphere

bzoj 1013: [JSOI2008]球形空间产生器sphere裸地高斯消元。。#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int n;const double eps=1e-6;double f[22],a[22][22];inline void gauss(){ re

2017-12-10 20:19:31 236

原创 CodeForces 830C Bamboo Partition

CodeForces 830C Bamboo Partition要求最大的d满足 ∑ni=1d−((ai−1)%d+1)≤k\sum_{i=1}^{n} d−((a_i−1)\%d+1)≤k推出上下界n×d−∑ni=1ai−⌊ai−1d⌋×d≤kn×d−∑_{i=1}^n a_i−\lfloor\frac{a_i−1}{d}\rfloor×d \le kn×d+d∑ni=1⌊ai−1d⌋≤k+∑ni

2017-12-10 19:12:10 253

原创 POJ 1282 庆典的日期

POJ 1282 庆典的日期我都不知道我是怎么搞过去的???正解是置换快速幂可惜我不理解。。#include <cstdio>using namespace std;int n,p;int f[210][210],s[210][210];int main(){ register int i,j; scanf("%d %d",&n,&p); for (i=1;i<=n

2017-12-07 20:25:34 583

原创 POJ 1006 Biorhythms

POJ 1006 Biorhythms​ 首先我们要知道,任意两个峰值之间一定相距整数倍的周期。假设一年的第N天达到峰值,则下次达到峰值的时间为N+Tk(T是周期,k是任意正整数)。所以,三个峰值同时出现的那一天(S)应满足S=N1+T1∗k1=N2+T2∗k2=N3+T3∗k3S = N1 + T1*k1 = N2 + T2*k2 = N3 + T3*k3可以考虑从结果逆推。根据上面的等

2017-12-07 19:21:07 149

原创 bzoj 2667 [cqoi2012]模拟工厂

bzoj 2667: [cqoi2012]模拟工厂由于n≤15,爆枚接受哪些订单 每次Check的时候,对于每段时间显然先提高生产力再生产产品 那么我可以考虑这一段内先尽量提高生产力 但是这样可能会导致生产力提高得太高而没有足够的时间生产产品使得某个订单失败 因此我们计算出对于后面的每一个订单,最多花多少时间提高生产力可以满足如果用接下来的时间都生产的话不至于fail 由于产品数量是

2017-12-05 21:16:34 186

原创 bzoj 1041 [HAOI2008]圆上的整点

1041: [HAOI2008]圆上的整点http://www.lydsy.com/JudgeOnline/upload/1041.flvhttp://blog.csdn.net/csyzcyj/article/details/10044629有上述定理,则问题转化为求r^2的 %4余1因子数 和 %4余3因子数。用约数个数定理,去掉偶因子后可以求出两者之和因此,求其中一种即可。从%4余1的因子数下

2017-12-05 21:14:04 198

原创 HDU 5241 Friends

HDU 5241 Friends各种语言相互独立故而答案是2的乘方由样例可知是32的n次方剩下的是一个大数乘法#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;const int N=9999;const int DLEN=4;class BigNum{

2017-12-05 21:09:30 196

原创 HDU 1568 Fibonacci

HDU 1568 Fibonacci先看对数的性质,loga(bc)=c∗loga(b),loga(b∗c)=loga(b)+loga(c)loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c); 假设给出一个数10234432,那么log10(10234432)=log10(1.0234432∗107)=log10(1.0234432)+7log10(1023

2017-12-05 21:06:31 159

原创 51nod 1350 斐波那契表示

1350 斐波那契表示斐波那契数列定义为 f[0]=f[1]=1, f[i]=f[i-1]+f[i-2] (i>=2) 从f[i]开始的连续f[i-1]项 的最短表示F[t] 是有规律的。 其前f[i-2]项和 从f[i-1]开始的连续f[i-2]项相等,其后f[i-3]项为 从f[i-2]开始的连续> f[i-3]项 每项+1比如,当i=6时,13开始的连续8项,即F[13],F[14],

2017-12-05 21:00:44 176

原创 51nod 1674 区间的价值 V2

1674 区间的价值 V2首先我们要知道对一个数一直and或者or操作减少或增加的次数是log级别的,这个看成二进制之后就很好思考。这样我们马上就能想到枚举一个端点,然后维护log段相同的线段(and和or显然需要分开维护)。考虑加入一个新的节点。 只需要把每个线段加入一个节点,合并值相同的线段。答案的统计也是非常简单。 效率O(n∗2logX)#include<cstdio>#inclu

2017-12-05 20:54:55 171

原创 51nod 1020 逆序排列

1020 逆序排列离线处理,二维dp[i][j]dp[i][j]表示前i个有k个逆序对的数量。f(n,k)=f(n,k−1)+f(n−1,k)−f(n−1,k−n)f(n,k)=f(n,k-1)+f(n-1,k)-f(n-1,k-n)用滚动数组储存#include <algorithm> #include <cstring> #include <cstdio> using namespac

2017-12-05 20:49:22 185

原创 bzoj 3629: [JLOI2014]聪明的燕姿

3629: [JLOI2014]聪明的燕姿首先,若n=a1p1∗a22...anpnn=a1^p1*a2^2...an^pn,那么n的约数和为(1+a1+a12+...+a1p1)∗(1+a2+a22+...+a2p2)∗...∗(1+an+an2+...+anpn)(1+a1+a1^2+...+a1^p1)*(1+a2+a2^2+...+a2^p2)*...*(1+an+an^2+...+an^p

2017-12-05 20:20:35 220

原创 51Nod 1355 斐波那契的最小公倍数

zyz的题解:https://www.zhihu.com/question/61218881#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 1000003#define p 1000000007#define LL long longusing

2017-09-27 21:24:08 242

原创 虚树

虚树在解决树上的问题时,我们经常会查询点对之间的关系。如果直接在原树上进行询问,那么时间级别就会是o(n)级别的,但实际上原树上有许多不必要的点。如果将必要的点挑出来建立一颗新的树,在新树上查询的复杂度就基本为o(1)的了。我们把这样的树叫做虚树,它将两个点之间的链缩减为一条边,极大优化了时间。那么如何构造呢?我们预处理出节点的dfs序,令dfn表示dfs序,并将要处理的点以dfs序排序,并开一个栈

2017-09-27 15:36:28 619

原创 BZOJ 1150 数据备份Backup

算是套路的贪心,因为给出数据是有序的,先将相邻的搞成线段存进堆里,每次取出一个最小的值,加到总值中,并改变左右的链表值,并将左右线段值存入当前位置作为撤销操作。#include <cstdio>#include <algorithm>#include <queue>#define mk(a,b) make_pair(a,b) using namespace std;const int in

2017-09-12 20:35:13 259

原创 BZOJ 2006超级钢琴

http://blog.csdn.net/zzkksunboy/article/details/76927058 写的很详细了,其实是一种贪心模板#include <cstdio>#include <queue>#include <algorithm>#define mk(A,B,C,D) make_pair(make_pair(A,B),make_pair(C,D))using name

2017-09-11 21:39:59 225

原创 CodeChef PROTEPOI Protecting The Poison

orz zzk sunboy 因为蛇是水平或竖直的,不可能同时挡住水平面上的箭和竖直面上的箭。 所以我们可以把二维平面上的问题变成一维线段覆盖问题。 线段覆盖问题我们有贪心的策略:假设目前最远覆盖到 now ,那么所有能够接下去覆盖的线段 {[L,R]|L≤now+1} 中,我们肯定选右端点最大的,这个很显然。不停选择右端点最大的线段更新 now ,最后就可以得到最优解了。#include<

2017-09-11 21:36:54 191

原创 Codeforces 725D Contest Balloons

首先将每个队伍按照气球量从大到小排序,将大于XXX的队伍压入队列,在队列中按照 体重-气球量+1 从小到大排序。 当XXX的气球减少时,就需要把之前没进入队列但此时气球量大于XXX的队伍压入队列,不断更新最小ans。#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#define ll long lo

2017-09-11 21:34:21 221

原创 51Nod 1052 最大M子段和

先将同符号的每一段存下来,并记录前后段标号,将正数段总和记录为tot 开一个最小堆存每一段的abs值。 每次从堆中取出一个x 去掉这一段,并将左右的段与之合并再存入堆中,作为撤销或更改操作。 每次操作都会减少一段,直到段数=k就退出。#include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #d

2017-09-11 21:27:32 228

原创 51Nod 1125 交换机器的最小代价

把所有的点分成一个个的置换的循环,对于每一个循环用循环中的最小的数进行置换,但这可能不是最优的。要考虑用循环外的最小数与环内最小数交换后再进行操作,把这两种都跑一遍,取最小值。#include<iostream>#include<algorithm>#include<cstdio>using namespace std;struct jq{ long long num; lo

2017-09-11 21:13:51 178

原创 51Nod 1241 特殊的排序

因为可以把一个数向最前面移或者是最后面移,即把不符合排序的那些数拿走,所以求的就是n-最长递增序列的长度。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 5e4 + 5;int a[N],pre[N];int main(){ int n;

2017-09-11 20:53:29 206

原创 [2017百度之星程序设计大赛 - 复赛]F - hdu6149

因为是三元组<x,y,z><x,y,z> 暴力枚举处于x位置的高谷,然后建网络流的图,每次跑dinic取最大流。 枚举位置时直接dfs,上界是高谷总数的一半。 可以证明答案一定在dfs出的结果内。#include <cstdio>#include <queue>#include <cstring>using namespace std;int T,n,m,k,kd;int hi[10

2017-09-11 20:10:43 253

原创 [2017百度之星程序设计大赛 - 复赛]E - hdu6148

裸的数位DP,只需要判断之前是否已经改变过递增减就行了。直接上模板。#include#include#include#include#define ll long longusing namespace std;const int N=110,P=1000000007;ll f[N][2][10],a[N],n;ll dfs(ll pos,ll st,ll lim,ll p

2017-09-11 19:56:15 204

原创 [2017百度之星程序设计大赛 - 复赛]D - hdu6147

乱搞一下,可以推出如果相交,必定是这条边之前的8条内的一条,那么对于每条边,暴力判断一下。就可以得出答案了,复杂度是O(跑的过)。#include #include #define C (c=getchar())using namespace std;int T;inline void read(int &a){ a=0;static char c;C; while (

2017-08-30 21:40:59 249

原创 [2017百度之星程序设计大赛- 复赛] C - hdu6146

我们设 Bn 代表从某个角出发,然后走遍所有格子回到同一列的方案数目。Bn=2×Bn−1=2n−1同样,我们设 An 代表从某个角出发,然后走遍所有格子的方案数。则 An=Bn+2×An−1+4×An−2其中 Bn 代表回到了当前列的方案数, An−1 代表先填满当前列然后走到相邻的列处理同样的一个子问题, An−2 代表通过对角线方式先走完当前列与相邻列的格子,然后剩下的 n

2017-08-30 21:39:02 302

原创 [2017百度之星程序设计大赛 - 复赛]A - hdu6144 B - hdu6145

这两道题都是属于模拟题,B题我弃坑了。B题对于一个没有表达式的数,找出它的循环节。对于一个表达式也是找出它展开后重复的部分,用快速幂和快速乘计算,首尾单独处理。放一个A题#include#include#include#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using na

2017-08-30 21:37:03 281

原创 (坑)网络流浅谈

对于网络流的建模不太熟悉,列举常用模型。最小割:二分图最大匹配:最小点权覆盖:最大权闭合子图:最小路径覆盖:最小边覆盖:最大点权独立集:

2017-07-14 22:20:46 237

原创 [bzoj]3876: [Ahoi2014]支线剧情

可以看出来是有上下界的费用流,我们对于一条边权为z的边u,v,从s向u连一条容量为1的边,从u到v连上容量为INF的边,让此边可以重复走。对于每个点p,从p到T连上一条流量为p,费用无的边,再从x到1连上一条费用无,流量无限的边,直接跑网络流就行了。跑的好慢啊。。。#include #include #include #include using namespace std

2017-07-12 23:35:20 1658

原创 [Loj]#6004. 「网络流 24 题」圆桌聚餐

建立源点s与所有单位连边,建立汇点T将所有餐桌与t相连,再将单位与餐桌各连上容量为1的边。跑一遍最大流即可。输出路径时,只要查看改变是否有流即可#include #include #include #include using namespace std;const int N=1005,INF=1<<29;int m,n,x,sum;struct node { int

2017-07-11 23:08:09 338

原创 [bzoj]1520: [POI2006]Szk-Schools

对于每座学校,都将它与可更换的值连上一条容量为1,权值为c*|a-m|的边。然后跑一遍费用流就行了。#include #include #include #include using namespace std;const int M=1000005,N=2005,Inf=1<<29;int n,m,a,b,c;struct edge{ int nxt,to,ro,c,fl

2017-07-11 22:37:28 293

原创 [Loj]#6003. 「网络流 24 题」魔术球

我是直接用贪心跑的,但其实可以用网络流来跑。对于网络流,通过分析可以得到,如果将i+j为完全平方数的i与j连上边。那么每一根柱子就是一条路径,答案就是有n条路径的最小路径覆盖。可以自己画图YY。#include #include #include using namespace std;const int N=65;int n;vector v[N];inline b

2017-07-10 22:55:02 454

原创 [Loj]#6002. 「网络流 24 题」最小路径覆盖

题意如题名,最小路径覆盖。答案为点数减去最小割。用dinic直接跑。#include #include #include using namespace std;const int N=205;int n,m;int map[N][N];int fr[N];int vis[N];int sum;int in[N];int le;int fa[N]

2017-07-09 23:25:18 362

原创 [Loj]#6001. 「网络流 24 题」太空飞行计划

分析后看出是最大权闭合子图,那么答案就是正权值-最大流。#include #include #include #include #include #include #include using namespace std;const int N=2505;const int inf=1<<29;int m,n,sum,s,t;int cur[155];int h

2017-07-09 23:22:54 455

原创 [Loj] #6000. 「网络流 24 题」搭配飞行员

二分图最大匹配值,直接裸上匈牙利。#include #include using namespace std;const int N=105;int n,m;int a,b;int ans;bool vis[N];int fr[N];int ga[N][N];bool find(int x){ register int i; for (i=m+1;i<=n;i++)

2017-07-09 23:19:30 359

原创 [bzoj]4590: [Shoi2015]自动刷题机

二分答案,暴力验证。找到一个最小满足的值与一个最大满足的值。记得最后判断二分的是否正确。#include #include #define ll long longusing namespace std;int n,k;ll w[100005];ll sum,x,y;inline ll pd(ll x){ register int i; ll now=0,ret=0;

2017-07-06 21:43:36 292 2

原创 [bzoj]2130: 魔塔

这道题我没想出来,只能看题解,学长的题解都指向了Claris的题解。貌似维护最小值,次大值会跑的更快?不过我没打。#include #define C (c=getchar())using namespace std;const int N=100005,inf=1<<29;int n,m,ans;struct qaq{ int vl,vr,vx,sig;}tr[269505

2017-07-06 21:34:19 259

原创 [bzoj] 1073: [SCOI2007]kshort

罕见的题目就是题意的题(感觉好奇怪?)a*跑不过去,只能cheat。正解应该是yen算法,但是这东西我问manchery大神被D飞,以下原话:这算法学什么?用可持久化可并堆啊!。。可持久化堆等学了再来补上。#include #include #include #include using namespace std;const int N=51;const int M=

2017-07-06 21:28:02 659

原创 (开坑)在线/离线求lca

在线:ST:倍增:离线:tarjan:

2017-07-06 09:33:19 237

原创 [bzoj]1026: [SCOI2009]windy数

看题目很容易想到数位dp,具体做法看这位的:http://blog.csdn.net/zz_ylolita/article/details/50754618讲的还是很详细的。#include #include #include #define ll long longusing namespace std;ll a,b;int len,d[12];ll dp[12][12];

2017-07-04 18:02:07 160

空空如也

空空如也

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

TA关注的人

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