自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Codeforecs 789C Functions again 基础DP

点击打开链接题意:给出n个数,n先记新序列x[i]为abs(a[i]-a[i+1])  若区间l以奇数开头则,则奇数元素x[i]为都为正,偶数元素x[i]为负数.  l为偶数开头则相反.. 则i,i+2,i+4...区间后部分元素都相同的,设dp[i]以i开头的最大区间 dp[i]=max(b[i],dp[i+2]+b[i]+b[i+1]) #include usin

2017-03-30 02:47:13 255

原创 Hackerrank (70)Range Modular Query 莫队+暴力

点击打开链接题意:给出n个数,q次询问,q:给出l,r,x,y问[l,r]内ai=kx+y的个数.n,q,x,y,ain次询问,根据x,更新出ai,ai=kx+y的复杂度为nlogn 由于ai要在[l,r]内,离线后,利用莫队更新[l,r]内ai出现的次数,总的时间复杂度为O(n*(sqrt(n)+logn)) #include using namespace std;

2017-03-29 16:36:25 437

原创 Codeforces 151C Win or Freeze 简单博弈+唯一分解

点击打开链接题意:给出一个数字n,n一个状态为1或者素数则为必胜,一个结点n的后继为:n的因子 若后继(因子)都为必胜态(素数)则必败首先n用唯一分解表示为n=p1^a1 *p2^a2*...pn^an,若存在一个因子不为素数,则i>=2或者i==1&&ai>=2若i==1&&ai>=2 则取n的一个因子 p1^2 则为必胜态若i>=2 则取p1*p2 则也为必胜态即存

2017-03-26 18:03:28 456

原创 Codeforces 474C Captain Marmot 暴力+几何(绕定点旋转)

点击打开链接题意:T组数据T假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转a角度后的新的坐标设为(x0, y0),有公式:    x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ;    y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ;(不会证明。。

2017-03-26 15:48:33 831

原创 Codeforces 787E Till I Collapse 主席树+二分

点击打开链接题意:n个数,一个group为下标连续的数&&不同的数最多只能有k个,问k=1~n时的最小分组? n,ai为了对每个固定的L,找到最后一个满足的r 使得[L,r]内不同的数正好为k。主席树维护前缀i时,从下标L=1开始 二分找到最后一个满足k的r 令L=pos+1继续二分,每次L最至少前进k格(n/1+n/2+...n/n=nlogn) 则复杂度为O(nlogn*logn*

2017-03-26 11:47:05 729

原创 SPOJ D-query 主席树在线(求区间不同的数的个数)

点击打开链接题意:n,m主席树:对于每个前缀i建立线段树,每个线段树中相同的数保留一次此时l,r表示下标,sum:前缀i内:下标l~r不同的数的个数 对于每个查询[l,r],只要在前缀r的线段树上,找到下标>=l的sum即可 #include using namespace std;const int N=2e6+20;struct node{ int l,r,

2017-03-25 19:55:55 1005

原创 POJ 1269 Intersecting Lines 叉积(求直线交点)

点击打开链接#include #include #include #include #include using namespace std;const int N=2e5+20;const double eps=1e-10;int sign(double x){ if(x>eps) return 1; if(x<-eps) return -1; r

2017-03-25 17:56:15 476

原创 POJ 2104 K-th Number 主席树(求区间第k大)

点击打开链接主席书资料题意:给出n个数,m次询问,[x,y]内第k小的数时多少?n主席树:对原序列的每个前缀i都建立一个线段树 维护值域[l,r]中的每个数,在前缀i的出现次数.此时l,r不在表示为下标,l,r为第l~r小的数先将原序列离散化后,更新出主席树求[x,y]内第k大的数?若第1~mid大的数在[x,y]中出现的次数sum>=k,则[x,y]的第k大就

2017-03-25 16:23:07 480

原创 hdu 3333 Turing Tree 线段树 离线查询(区间内不同的数之和)

点击打开链接题意:n个数 q次询问,n用线段树离线处理,先把询问区间按照右端点排序.按区间右端点顺序cur~r依次插入线段树中 a[i]在[l,r]内出现:a[i]插入时i=l则只在线段树中a[i]最后一次出现的位置保留a[i],则a[i]不会被重复计算也不会影响后面查询, #include using namespace std;typedef lon

2017-03-24 10:51:24 482

原创 POJ 2653 Pick-up sticks 判断线段相交

点击打开链接题意:给出n条棍子端点,n棍子i在最上方,当且仅当没有棍子j(j>i)与棍子i相交跨立:某线段的两个端点分别处于另一个线段所在直线的两旁 判断线段p1p2,p3p4是否相交:p1p2跨立直线p3p4 && p3p4跨立直线p1p2p3,p4在直线p1p2两旁,则叉积:p1p2 *p1p3 和 p1p2 *p1p4 符号相反(一个顺时针或一个逆时针) 

2017-03-23 21:59:44 429

原创 POJ 1654 Area 几何(叉积求多边形面积)

点击打开链接利用向量积=ab*ac*sin(ab,ac)=2*S三角形ABC按逆时针依次计算多边形相邻两个顶点和原点构成向量的叉积,及把多边形分成若干个三角形,累加即可#include #include #include #include #include using namespace std;typedef long long ll;const int N=2e6+

2017-03-23 11:05:49 472

原创 POJ 1106 Transmitters 几何(叉积应用)

点击打开链接题意:给出圆心坐标p和半径,n个点的坐标,n若切割的那条线上没有点,则它落在两个点A,B之间,将这条线顺时针转向A,则此时半圆的覆盖的点不会减少,反而可能增大则切割的那条线上肯定有点.先淘汰掉半径外的点,枚举线上点a,则点b在半圆内当且仅当pa在pb的顺时针(逆时针)方向上,用叉积判断即可叉积判断方向,若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角

2017-03-22 20:57:15 310

原创 URAL 1018 Binary Apple Tree 简单树形背包

点击打开链接题意:n个结点的树,每条边都有边权,问保留根节点1和Q条边时,最大的边权和是多少?保留Q条边 即保留Q+1个点,dp[i][j] 以i为根的子树中选j个的最大价值 dp[i][j]=max(dp[i][j],dp[v][k]+dp[i][j-k])递推时,dp[i][j-k]为不含子树v,选j-k的最大价值 #include using namespace

2017-03-22 15:01:07 362

原创 UVA 10534 Wavio Sequence DP(LIS+二分)

点击打开链接题意:Wavio序列定义为:长度L=2*n+1 前n+1个严格递增,后n+1个严格递减,给出n个数求满足Wavio的最长子序列Wavio序列中间点最大,若中间点k,则其长度取决于min(LIS[k],LDS[k]),nL[x]:LIS长度为X的最小a[j] 若L递增 则找到最后一个x,L[x]初始时L递增,每次将L[x+1]更新为a[i]时,L[

2017-03-22 13:42:57 346

原创 Hihocoder 1273 清理海报 DAG建图+几何

点击打开链接题意:给出n张矩形海报的左上角(x1,y1),右下角(x2,y),撕下一张海报A,会把海报B,C..都斯去(B,C..为覆盖A的海报)海报A被海报B覆盖当且仅当他们存在面积大于0的交集并且A在B之前贴出,海报A的一个角被海报B覆盖当且仅当这个顶点处于海报B的内部 一张海报想要被手动撕掉的话需要至少存在一个角没有被其他海报覆盖,问选那一张海报手动撕 能使被撕去的海报最多?

2017-03-21 20:48:39 317

原创 Hihocoder 1054 滑动解锁 暴力dfs

点击打开链接题意:手机滑动解锁,要求长度至少为4 每次可以走到相邻点,每个点只经过一次,给出某个路径的一部分n条边,问该路径有多少合法方案 两个点相邻当且仅当以这两个点为端点的线段上不存在尚未经过的点 4213合法,132非法 首先保存i->j时必须经过中间点,不考虑路径要求的n条边时 容易用dfs算出所有可能路径 由于最终路径要包含所给n条边,则dfs时记录路径中的边

2017-03-21 18:45:52 435

原创 Codeforces 355C Vasya and Robot 暴力枚举

点击打开链接题意:给出n个物品重量wi,n如果用的手和上一次相同 则加上对应的Q1或者Q2,求取走n物品的最小消耗 由于每次只能从端点拿 若左手拿x次则会拿走前x个,右手会拿走后n-x个,交替使用后,在加上abs(x-(n-x))*(Q1 or Q2) 保存前缀和,暴力枚举即可#include using namespace std;typedef long long

2017-03-21 09:40:16 616

原创 Codeforces 337C Quiz 贪心+快速幂

点击打开链接题意:n个题目,答对m次,答对1次+1分,连续答对k次,则当前分数翻倍,n,m,k分数最小,则尽量不翻倍令b=n/k,r=n%k 则每次连续答对k-1次 然后错一次,分数不翻倍时最多能答对y=b*(k-1)+r道题目 若m>y 则分数肯定会翻倍 选分数较小时翻倍 则有x=m-y次翻倍 翻倍的分数为 t=(((k*2+k)*2)+k)*2... t=2^x*k+2

2017-03-20 17:05:26 341

原创 Codeforecs 424C Magic Formulas 规律+前缀和

点击打开链接^异或符号 题意 给出n个数,n异或满足交换律和消去率 i mod k (i=1,2...n)  = 1 ^2^3..^k-1^0 ^1^2^.....k-1^0,... 若有余数,r=n%k 总共有b=n/k+1组,若组数为偶数,则前面每组两两异或为0 ,最后有余数一组的值为 1^2^3..^r若组数为奇数 则前面每组两两异或为0,剩下1^...k-1 1

2017-03-20 14:40:40 789

原创 Codeforecs 465C No To Palindromes! 构造+思维

点击打开链接题意:给出初始串长度为n,包含前p个字符的合法string,n=2的回文子串,求下一个字典序大于初始串的合法的子串?无长度>=2的回文子串 :任意连续两个不能相同a[i]!=a[i-1]若以i为中心无长度为3的回文子串 则也没有长度l>3的回文子串 所以a[i-1]!=a[i+1]为了构造出下一个合法排列:先找到第一个能往上变化的a[i],若p>=3,之后按照上

2017-03-19 15:44:19 341

原创 ARC 070 D No Need DP

点击打开链接题意:n个数,ai=k,不需要的数:在它所在的任意一个合法集合中被去掉后,该集合仍然合法.n,k逆向思维,若ai为需要的数,则存在集合S,S=k(去掉ai后非法) 则判断不选a[i]时,是否有集合S的和在区间[k-a[i],k-1]内dp记录前i-1个,和后i+1个所能选出的和即可#include using namespace std;typede

2017-03-19 11:10:31 587

原创 Codeforces 791C Bear and Different Names 简单构造

点击打开链接题意:给出1~n-k+1连续k个人的名字是相同或者不同,构造出满足条件的n个名字 n,k任意生成50个可重排列,则a,aa,a..a,b,bb,b...b 前5个字符每种各10个 简单构造:若i~i+k-1为N,则令ans[i]=ans[i+k-1],使得i+1~i+k-1为Y,则i+1~i+k为N还是Y只取决于ans[i+k] #include using

2017-03-19 10:48:52 467

原创 Codeforces 791 B Bear and Friendship Condition 规律

点击打开链接题意:n个点,m条边,n,m观察得到 同一个连通分量内,因为u,x联通,若长度为l 则u->长度2,3..l都必须有直接相连的边,所以任意两点都必须存在直接相连的边,dfs求出每个连通分量的点数n,合法的图边数要求边=C(n,2) #include using namespace std;typedef long long ll;const int N=5e5

2017-03-19 10:47:25 512

原创 Codeforecs 785C Anton and Fairy Tale 数学+二分

点击打开链接题意:仓库最多放n件物品,第i天补充m件后 在拿i件,当仓库物品若m>=n 则第n天拿走n个后结束若n>m[1,m]天内补充min(i,m)=i,每天减少i  1~m天内,物品补充后都是满的i=[m+1,ans]天起 (补充完后)每天还减小k,k=i-m n=n-m(第m+1天的值)设最后一天为k 则n#include usin

2017-03-16 09:48:03 425

原创 Codeforces 272C Dima and Staircase 思维 or 线段树

点击打开链接题意:给出n个物品高度ai,ai每次都从左端点1开始叠放,第i个方块肯定落在第i-1个方块的上方 取高度边界low=ans[i-1]+h[i-1]高度递增,(下标>=i)高度>=a[i]的都能放的宽度为i的方块若l若l>=a[w] ans[i]=l (因为高度l以上的宽度都大于等于w) #include using namespace std;typ

2017-03-15 13:38:40 393

原创 HackerRank Medium(30) Super Six Substrings DP+数学

点击打开链接题意:长度为n,n能被6整除 即既能被2和3整除 则该数末尾为偶数&&各位数之和被3整除 dp[i][m] 以i开头的子串,mod3为m && 以偶数结尾的个数 x=s[i], dp[i][(m+x)%3]=dp[i+1][m]+x%2==0?:x%3 i和i+1相连或者单独一个s[i] #include using namespace std;ty

2017-03-14 19:18:18 403

原创 Codeforces 276D Little Girl and Maximum XOR 贪心+构造

点击打开链接题意:  给定l和r,l,r把l,r展开成2进制000111...       000110...若l,r二进制中第一个不相同为第k位,则取a第k位之后全部取1,b第k位之后全取0此时答案的第k位起全部为1,显然为最大.因为ans第k位前不可能有1,a,b必须在l,r内,若k位之前,l,r某位为(1,1)时,若a,b其中一个改位取0,必然小于l.

2017-03-13 20:30:39 343

原创 BZOJ 2038 小Z的袜子 莫队算法(模板题)

点击打开链接莫队算法是离线处理一类区间不修改查询类问题的算法。就是如果你知道了[L,R]的答案。你可以在O(1)的时间下得到[L,R-1]和[L,R+1]和[L-1,R]和[L+1,R]的答案的话。就可以使用莫队算法。题意:n个数,m次询问,n,mf[i]表示i在区间出现次数,答案为: S=segma(C(f[i],2)) /C(r-l+1,2) 化解得 S=(segma(

2017-03-13 16:22:20 367

原创 POJ 3764 The xor-longest path 字典树异或+dfs

点击打开链接题意,一颗n个结点的树,n类似于:只要把1~i-1异或前缀插入到Trie中,即可查询到i结尾的最大异或求出d[u]=root->u的异或值 则u->v路径的异或=d[u]^d[v] 把所有d[i]插入到Trie中,在Trie中查询某个d[u]得到的最大值即为从u出发的最大异或值坑:这题用vector就TLE..#include #include #inclu

2017-03-12 13:22:47 400

原创 BZOJ 4260 REBXOR 异或Trie+dp

点击打开链接题意:给出n个数,n如果先把前缀1..i-1的异或值都插入到Trie中 此时在Trie中查询到与前缀i异或的最大值,即以i结尾最大异或区间.利用dp记录前i个数的最大异或值,枚举第二段区间开头i时,查询后缀i的最大异或值+dp[i-1]即可得到ans  #include using namespace std;typedef long long ll;co

2017-03-11 13:04:40 591

原创 BZOJ 2120 数颜色 分块+二分

点击打开链接题意:n个数,m个操作n,m1.查询[l,r]区间内有多少不同的数字2.单点修改 (不超过1e3次)如果利用线段树 单点更新时把x变成y后 不容易更新出[l,r]内不同数个数此时用分块来做,记录每一个数它的上一个位置,不存在则记为0,判断[l,r]内不同的个数,如果a[i]第一次出现在[l,r]内,则ans++ 更新次数若查询区间[l,r] 头尾两块直接

2017-03-10 15:18:51 408

原创 hdu 5536 Chip Factory 01 Trie

点击打开链接题意:t组数据n个数,t,n//先在n个数以二进制形式插入到Trie中,枚举i,j后,暂时在Trie中删除i,j 然后在Trie找到最大的异或值,在插入i,j; O(n^2*32*5) #include using namespace std;typedef long long ll;const int N=2e3+20;ll ch[32*N][2],v[32*

2017-03-09 20:16:10 268

原创 POJ 2677 Tour 双线DP

点击打开链接题意:给出n个点坐标 要求从起到走到终点在走回起点的总路程最小&&中间点要恰好经过一次 n从起点到终点在走回起点,可以看成两个人同时从起点到终点&&路径不相交的最短走法设dp[i][j]为两个人分别在第i,j点时候&&前max(i,j)点恰好都经过一次,此时最少需要多少距离才能到终点人可以互换 所以dp[i][j]=dp[j][i] 则默认i>j,则第i+1

2017-03-09 15:09:53 279

原创 Codeforces 437C The Child And Toy 贪心

点击打开链接题意:有n点,m条边 每个点有价值a[i] 删除一点所需代价为当前和它相连的a[j]之和,求删除n个点的最小代价 n,m删除一个点也就删除了它所有的边,若从边的角度来考虑:一条边(u,v)被删除的代价为a[u]或者a[v],(若a[u]>a[v]),所以从a[u]大的点开始删除,使得每条边被删除的代价都最小#include using namespace

2017-03-08 15:53:27 410

原创 hdu 4825 Xor Sum 01字典树(入门)

点击打开链接题意给出n个数和m次询问 n,m直接暴力O(nm),显然超时,由于异或和要最大 S从高位到低位的1尽量保持为1,0尽量变为1把n个数写成2进制插入Trie中,S从高位开始尽量找不同即可#include using namespace std;typedef long long ll;const int N=2e5+20; int ch[32*N]

2017-03-08 14:47:27 366

原创 Codeforces 116C Party 树+dfs

点击打开链接题意:森林有n个结点,n若某个树的高度为h 则至少要分h组,若把每个高度的分在一组则只要h组,不同的树可以分在同一个组 所以ans=max(hi) #include using namespace std;const int N=2e5+20;int vis[N],ans,a[N];vector e[N];void dfs(int u,int fa,int h

2017-03-08 12:09:00 355

原创 Codeforces 369C Valera And Elections 树形DP

点击打开链接题意:n个结点的树,n1路径上的边都被修理,求选出最少点使得要修理的边都被修理容易得到,若u->1,v->1都有要修理的边,&&u是v的祖先,则选中v即可,dp算出子树中是否有边需要被修理,一个点i需要被选中,只有当边(u,i)=2&&子树没有边需要被修理#include using namespace std;typedef long long ll;

2017-03-07 13:47:08 305

原创 Codeforces 300C Beautiful Numbers 组合数取模+暴力

点击打开链接题意:长度为n的数字,n暴力枚举:如果包含了x个a 则b有n-x个,若数字之和也合法,则该方案有C(n,x)种取法,累加即可.mod为素数,组合数取模求逆元时用到费马小定理 a^(p-1)≡1(mod p)#include using namespace std;typedef long long ll;const int N=2e6+20;const

2017-03-06 20:28:38 305

原创 POJ 2311 Cutting Game SG函数

点击打开链接复习下SG函数对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Garundy函数g如下:g(x)=mex{ g(y) | y是x的后继 }。来看一下SG函数的性质。首先,所有的terminal position所对应的顶点,也就是没有出边的顶点,其SG值为0,因为它的后继集合是空集。然后对于一个g(x)=0的顶点x,它的所有后继y都满足g(y)!=0

2017-03-06 15:28:02 314

原创 Codeforces 782B The Meeting Place Cannot Be Changed 二分(精度)

点击打开链接题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间(相遇位置不一定为整数点) n每个的速度为0~vi 如果在t秒能相遇 在ti #include using namespace std;typedef long long ll;const int N=2e5+20;struct node{ double x,v;}p[N];int n;

2017-03-06 09:11:54 659 2

空空如也

空空如也

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

TA关注的人

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