自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CF GYM 100548 Color(2014ACM西安现场赛Problem F)

题意有n个连续的花需要图色, 共m种颜色,相邻的花的颜色不能相同,求刚好用k种颜色涂满这些花的方案数题解先不管m。 设g[i] 为用 <=i 种颜色涂n朵花的方案数 f[i] 为刚好i种颜色涂n朵花的方案数 所以有 为简单的容斥 即用(<= k 种颜色的方案数)-k * (<=k-1的方案数) 但是此时会剪多,所以加上C(k,2)* (<=k-2的方案数),以此类推之前写了

2016-10-28 22:30:18 338 1

原创 bnuoj 52305 Around the World dfs+排列组合

题意n个城市,联通图,给出n-1条信息,表示城市A和城市B之间有2*C条无向路相连通。需求出从城市1开始,遍历所有边的方案数。数据范围: 2 ≤ n ≤ 1e5 路的总数量不超过2*1e6样例输入: 3 1 2 1 2 3 1 表示3个城市,1-2有2条路,2-3有三条路题解由于点数为1e5,静态链表方式存图。 求方案数的过程为深搜。 对于当前节点u来说,它有若干个字节点v1、v

2016-10-04 00:19:31 280

原创 Poj 2528 Mayor's posters (线段树区间更新+离散化)

题意向墙上按顺序贴n张海报,第i张海报覆盖范围为[li , ri], 求最后能看到几张海报。题解首先肯定是线段树的区间更新,但是由于 li 和 ri 的范围是 1e7, 直接存数会爆炸,所以需要离散化。(看了很多题解,大家都是先将2*n个点排序,然后在update的时候二分找位置)本人的离散化比较奇特,是放在结构体里的。一个需要注意的点是,两个点相差大于一的时候,要向中间插入一个点,所以建树的时候需

2016-08-05 19:39:21 307

原创 Codeforces 691 E Xor-sequences 矩阵快速幂

题意从n个数中挑选k个数做排列(是排列哦,如果两个数相同不判重),如果这k个数中,相邻的两个数异或的二进制结果中有3的倍数个1,这样的排列就是满足条件的。最后输出满足条件的排列的个数。题解处理出一个矩阵G,g[i][j] 表示num[i] 和 num[j] 异或满足条件 可知 G2 = G*G 中的 G2[i][j]就是以num[i]开头, num[j] 结尾,且k=3的满足条件的个数 G的n次

2016-07-22 18:52:45 442

原创 CF Round #362 (Div. 2) 697D. Puzzles

题意一棵树,点1为根。从1开始dfs搜索,由于搜索的顺序是有多种可能的,所以按搜索顺序给节点编号,每个点的编号也都是有多种可能的。求每个点编号的期望。题解如样例一,有1->2, 1->4, 1->5 由于以2,4,5为根的子树的排列顺序不同,有六种排列 那么很容易得到ans[2] = ans[1] + (1+1+4+5+2+5) /6; 但如果有多个节点同根,那情况是不好列举的。抽离问题

2016-07-18 14:05:08 411

原创 CF Round #361 (Div. 2) 689C. Mike and Chocolate Thieves

题意有四个编号固定的贼要偷巧克力,第i个贼偷的数量的第i-1个人的k倍,k>1且为整数,但是未知 每个贼的包的容量最大都是n,也未知 现在告诉你,他们偷巧克力可能的方案数为m, 求最小的满足条件的n 样例: 如果m=2,即两种方案,那就一定是(1,2,4,8)和(2 , 4 , 8 , 16),n最小为16,最大为23 如果m=10,即十种方案,可知是不可能的,因为(8 ,16, 32,64

2016-07-15 17:50:37 290

原创 Cf Round #361 (Div. 2) 689D. Friends and Subsequences

题意给两个长度相同的整型数组a[],b[], 找到所有的l到r,使得l到r内的 a_max 与 b_min相同,输出满足条件的组数。题解稀疏表+二分搜索 稀疏表: 用da[i][j] 表示 数组a从第i个元素开始,到第 (i + 2^j -1) 个元素中的最大数 同理db[i][j] 表示数组b中从第i个元素开始,到第 (i + 2^j -1) 个元素中的最小数递推的过程同dp: d

2016-07-15 17:31:09 292

原创 Cf Round #360 (Div. 1) 687D Dividing Kingdom II

题意n个点,m条无向边,q次查询。 从第l条边到第r条边形成的子图G,将G中的点分成两个集合,求两个集合内部的边的最大值(使其尽量小)。题解由于倾向于将较大边的两个端点放在同一集合中,将边按长度从大到小排序,在满足边号属于[l,r] 的前提下,分析该边的端点是否在同一集合中,若在,该边长度即为所求,否则继续遍历。 带权并查集: f[i] 表示点 i 的根, re[i] 表示点 i 与 f[i]

2016-07-15 10:00:15 335

原创 CF Round #361 (Div. 2) 689A 模拟

每次碰到模拟都要跪几发 +.+ 首先拨号数字至少要是3*3 或者 k*4 才能保证其初步的单一性 有一个坑没有想到的是 3*3中第三行是0或者8,坑了一发 上代码#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cstdlib> #include<cm

2016-07-14 09:17:16 373

原创 Cf #358 (Div. 2) E Alyona and Triangles (682E)

Cf #358 (Div. 2) E Alyona and Triangles (682E) 题目大意 是给出n个整点,任意三个点组成三角形的面积不超过s,求一个面积不超过4s的大三角形,该三角形包含这n个整点,且三角形的每个点的坐标为整数。 找到其中面积最大的三角形,将其扩展四倍(以每条边为对角线做平行四边形)形成一个大三角形,即为所求 至于怎么找面积最大的三角形,有几种不同的做法,最基本的

2016-07-13 15:07:17 893

原创 codeforces 616C The Labyrinth

从‘ . ’出发,相邻点作为连通块整体考虑,周围的星星要加上这堆点的个数。 两次bfs,一次找连通块,一次找可达的星星‘ * ’ ps:1> 记得取模。  2>要用int 取然后赋给char,一起用%s输出。——为了偷懒直接用char型字符取模结果。。。╮(╯▽╰)╭ #include #include #include using namespace std; int m,n; cha

2016-01-27 14:50:57 340

原创 codeforces 615B Longtail Hedgehog

本为无向图,可实际上因为要找到一条路径,使得路径上的点权递增,且 路径长度*终点度数最大。 所以存图时用结构体存,调整为起点小,终点大。 图的结构+dp算法 上代码:#include #include #include #include using namespace std; const int MAX_N=2e5+20; /// 说是无向边,但由于只可以从小到大,其实为有向边, ///

2016-01-23 15:05:25 366

原创 codeforces 613A Peter and Snow Blower

数学题,核心是求给定圆心到多边形的最短和最长距离,选用哪种公式非常重要.。。wa了半天发现Point定义里面居然写成了int T_T 最大距离一定是到某一个顶点 最小则不一定,与圆心,线段两定点构成的三角形形状有关。 我用到了三边求面积公式——海伦公式:s=sqrt(p*(p-a)*(p-b)*(p-c)); 其中p=(a+b+c)/2; 贴代码: #include #include #

2016-01-20 17:51:52 768

原创 codeforces 614A Link/Cut Tree

大致意思就是在 l 到 r 中输出所有 k  的次方数。刚开始不看题以为是 k 的倍数(⊙o⊙)… 贴代码 15ms #include #include using namespace std; typedef long long ll; int main() { ll l,r,k; scanf("%I64d%I64d%I64d",&l,&r,&k); ll f=l

2016-01-20 11:02:38 534

原创 codeforces 614B Geda's Code

大水题,英文太差,条件也不看清楚。。总之,上代码。#include #include #include using namespace std; const int MAX_N=1e5+10; char p[MAX_N]; char s[MAX_N]; bool perfect(char str[]) { if(str[0]!='1') return false;

2016-01-20 10:20:16 303

空空如也

空空如也

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

TA关注的人

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