Processing math: 100%

11 2014 档案

摘要:从低位到高位数位DP,f[i][j][k]表示已经填了后i位,转化的数字为j,后i位与x后i位的大小关系为k的方案数。#includeconst int N=202,B=7,P=(1P)c.x[i+1]++,c.x[i]&=P; return c; } Num operator-(Num ... 阅读全文
posted @ 2014-11-30 12:36 Claris 阅读(413) 评论(0) 推荐(0) 编辑
摘要:设第i条直线的解析式为aix+biy+ci=0di=a2i+b2i,则要求一个点(x,y),使得(|aix+biy+ci|di)2最小。 假设x固... 阅读全文
posted @ 2014-11-28 19:42 Claris 阅读(626) 评论(0) 推荐(0) 编辑
摘要:树上莫队,有几个坑:a可能等于b数据范围是100000#include#include#include#define N 100010#define K 17using namespace std;inline void read(int&a){char c;while(!(((c=getchar(... 阅读全文
posted @ 2014-11-25 13:34 Claris 阅读(337) 评论(0) 推荐(0) 编辑
摘要:l[i],r[i]表示站在i点往左往右走能看到的最高峰,用栈维护凸壳求出h[i]表示i点能看到的最高峰的高度a[i],b[i]表示i点往左往右走时反悔的点,即第一个h[j]>h[i]的j,用单调栈求出然后建树DFS一遍求出答案#include#define N 200010typedef long ... 阅读全文
posted @ 2014-11-25 12:27 Claris 阅读(399) 评论(0) 推荐(0) 编辑
摘要:FFT后减去重复选取的方案数。#include#include#includeusing namespace std;typedef long long ll;const int N=131072;int n,i,m,k;ll ans[N],sum[N],f1[N],f2[N];struct com... 阅读全文
posted @ 2014-11-24 18:19 Claris 阅读(409) 评论(0) 推荐(0) 编辑
摘要:枚举第一个位置,然后暴力检验。#include#define N 1010int T,n,m,a,b,x,y,i,j,k,q[N*N][2],cnt;char s[N][N],ts[N];bool v[N][N];bool solve(){ scanf("%d%d%d%d",&n,&m,&a,&b... 阅读全文
posted @ 2014-11-20 17:39 Claris 阅读(415) 评论(0) 推荐(0) 编辑
摘要:设f[i][S]表示第i份食物被两个人吃的状态为S是否有可能,枚举f[1][]的情况后检验f[i][0]=(f[i-1][1]&a[i-1]>=a[i])|(f[i-1][3]&a[i-1]>=2*a[i])f[i][1]=(f[i-1][1]&2*a[i-1]>=a[i])|(f[i-1][3]&... 阅读全文
posted @ 2014-11-17 21:09 Claris 阅读(542) 评论(0) 推荐(0) 编辑
摘要:首先预处理出[1,i]的答案设nxt[i]表示i下一次出现的位置随着左端点l往右移,[l+1,nxt[l]-1]里答案都减去它的价值,[nxt[l],nxt[nxt[l]]-1]里答案都加上它的价值线段树维护#include#define N 1000010typedef long long ll;... 阅读全文
posted @ 2014-11-17 21:06 Claris 阅读(479) 评论(0) 推荐(0) 编辑
摘要:NOIP前做了几道POI,现在终于能在BZOJ上提交了…交上去最后几个点WA,看了数据发现p=0的特判错了…p=0,1时特判p=2时构造两种情况判断p=3时不考虑1的座位进行DP可以发现对于i+1的位置安排,我们只关心i-2,i-1,i的相对顺序以及它们的相邻、边界情况所以设f[i][j][S1][... 阅读全文
posted @ 2014-11-17 21:05 Claris 阅读(852) 评论(0) 推荐(1) 编辑
摘要:考虑枚举右端点,用线段树维护[i,nowr]的答案。当右端点向右延伸时,需要知道它前面第一个比它大/小的数的位置,这里面的最值将发生改变,这个使用单调队列求出,然后将所有的l都加1。注意常数优化。#include#define PB int mid=(a+b)>>1,l=x='0')&&(c='0'... 阅读全文
posted @ 2014-11-15 13:45 Claris 阅读(1061) 评论(2) 推荐(0) 编辑
摘要:分块预处理出[i,j]块内的答案以及数字出现次数,查询时向两边转移,用树状数组维护,复杂度O((n+m)nlogn)。#include#includeconst int N=50010,K=226;int n,m,l,r,i,j,k,size,block,a[N],b[N],p... 阅读全文
posted @ 2014-11-14 15:36 Claris 阅读(303) 评论(0) 推荐(0) 编辑
摘要:将坐标离散化后,对于每一个坐标建立一棵动态开节点的线段树,支持查询最大值、和,以及标记下放。#include#includeusing namespace std;typedef pair P;typedef long long ll;const int N=30010,T=300010;struc... 阅读全文
posted @ 2014-11-03 15:14 Claris 阅读(482) 评论(0) 推荐(0) 编辑
摘要:树形DPf[i][0]表示不向下连边的最大匹配数f[i][1]表示向下连一条边的最大匹配数h[][]表示对应的方案数为了防止爆栈用BFS为了防止MLE:1.数组循环利用,比如存边的数组在存完边后可以用来当dp数组2.BFS时判断哪些点已经走过的bool数组改成bitset3.能不开数组就不开数组,如... 阅读全文
posted @ 2014-11-03 14:13 Claris 阅读(327) 评论(0) 推荐(0) 编辑
摘要:求出凸包后,矩形的一条边一定与凸包的某条边重合。枚举每条边,求出离它最远的点和离它最左最右的点,因为那三个点是单调变化的,所以复杂度为O(n)。注意精度。#include#include#include#define N 50010using namespace std;typedef doub... 阅读全文
posted @ 2014-11-03 07:24 Claris 阅读(416) 评论(0) 推荐(0) 编辑
摘要:码农题,拆点BFS预处理出所有联通块的面积即可,注意分类讨论。#include#includeusing namespace std;const double pi=acos(-1.0)/4.0;const int N=210;struct P{int x,y,z;P(){}P(int _x,int... 阅读全文
posted @ 2014-11-01 16:53 Claris 阅读(270) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示