常州培训 day7 解题报告
最后一天。。有些感慨,这七天被虐的感动万分
第一题:
题目大意:
求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数。
之前写过了,懒得再写了。链接http://www.cnblogs.com/vb4896/p/3911283.html
第二题:
题目大意:
给区间染色,一种颜色会覆盖另外一种,且区间的端点也算一种颜色。比如 [2,3] 染成红色,[1,2]染成绿色,[3,4]染成紫色,询问区间[2,3],那么会有红绿紫三种颜色。
颜色用数字表示,颜色种数k<=60,颜色从0开始编号。有q个操作(q<=500000),要么询问一个区间的颜色种数,要么染色。
解题过程:
1.一看就是考线段树,poj上原题的改版,那题是端点不算颜色的,处理起来方便得多。
2.对于线段树上的每一个节点,维护一个cover(long long),用二进制压位的方法保存某种颜色是否染过(0,1);更新的话只要 它的所有儿子的cover 用或运算 。
3.考试的时候1个小时写好,调试了2个小时。。对线段树加了些特殊处理的情况,最后发现自己出的一组小数据过不去。然后才发现 对于点修改,我的线段树是要挂掉的。。 本来以为要爆0,结果测试数据中没有点修改的情况。。骗到了AC。
4.考后思考:其实可以 建2棵线段树,一个是只管端点,一个是只管线段,写起来几乎一模一样,复制粘贴就好。询问的时候只要 对询问两棵的结果 做或运算即可。自己也写了下,20分钟写好,调试了一个小时。。看了半天发现又是老错误,就是
1<<c 的时候 ,c不能超过30,因为1默认是一个int。 所以要改成(long long )1<<c 或者 1LL << c ;
5.讲课大神提供的标准解法:个人感觉非常巧妙, 把 一条长度为1的线段 拆成 3个点,也就是2个端点,把中间的线段看成一个点。 把线段树的规模扩大了一倍,但是处理起来非常方便。
第三题:
题目大意:
给出一棵n个节点的树(n<=50000)假设在一棵有根树上存在五个互不相同的节点,分别记为a,b,c,d,z,若这5 个点同时满足以下要求:a,b,c,d,lca(a,b),lca(c,d),lca(lca(a,b),lca(c,d))这7个节点互不相同,并且z是lca(lca(a,b),lca(c,d))的祖先;那么五元组(a,b,c,d,z)表示了一棵合法的“不三不四树”。同时,交换
a,b,c,d,z的顺序只算作一种。 求方案数mod 1234567891;
解题过程:
1.这题考试时感觉会很难,就把时间放在了第二题。爆搜都写不出来。算法比较容易理解,有个优化非常关键。
2.AC算法:
定义F[node,0]为以node为根的子树的节点数;
定义F[node,1]为以node为根的子树中 ,选出3个不同节点a,b,c,且LCA(a,b)=c 的方案数(不考虑顺序,下同)
定义F[node,2]为以node为根的子树中,选出4个不同节点a,b,c,d,且LCA(a,b)=LCA(c,d)=node的方案数;
A : F[node,0]最好转移,累加F[node.son,0] 再加1;
B : F[node,1]=sum ( F[i,0]*F[j,0]),(i<j i,j∈node.son); 这里的<表示i在j的左边,下同
C : F[node,2]=sum ( F[i,1]*F[j,1]),(i<j i,j∈node.son);
这样的话复杂度应该是O(N^3);
优化:在B中的sum ( F[i,0]*F[j,0]) 这里, 这里其实不必一一枚举 i,j,对于一个固定的j,那么 要加上F[i,0]*F[j,0];
i取遍 j左边的所有儿子, 利用乘法分配率, 其实只要 F[j,0] * sum(F[i,0]) (i<j i,j∈node.son);sum只要边求边维护即可。 同理 C 也用同样的方法优化 总的复杂度优化到 O(N);
常州培训 day7 解题报告的更多相关文章
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 常州培训 day6 解题报告
第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...
- 常州培训 day4 解题报告
第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...
- 常州培训 day3 解题报告
第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...
- 常州培训 day2 解题报告
第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...
- 常州培训 day1 解题报告
第一题:(骗分容易,AC难.) 题目大意: 给出一个字符串,找出满足条件A的区间的个数.A:字符A,B,C的出现次数相同. 都出现0次也算,区间的长度可以是0(就是只有一个数).30% |S| ≤ 1 ...
- 「2017 山东三轮集训 Day7 解题报告
「2017 山东三轮集训 Day7」Easy 练习一下动态点分 每个点开一个线段树维护子树到它的距离 然后随便查询一下就可以了 注意线段树开大点... Code: #include <cstdi ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
随机推荐
- bootstrap学习笔记<二>(标题,段落样式)
标题.样式:class="h1"~class="h6" bootstrap中重新定义了h1~h6标签,具体差别如下: 在bootstrap中其他任何标签使用cl ...
- C/C++中static关键字作用总结
来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...
- 算法_队列的Java通用数组实现
在实现Queue的API的时候,可以使用两个实例变量做索引,一个变量head指向队列的开头,另一个变量tail指向队列的结尾.在删除一个元素的时候,使用head访问,并将head+1,插入一个元素的时 ...
- OpenGL的glTexCoord2f纹理坐标配置
纹理坐标配置函数,先看定义: void glTexCoord2f (GLfloat s, GLfloat t); 1.glTexCoord2f()函数 有两个参数:GLfloat s, GLfloat ...
- SSIS包部署
1.ssis包部署可以生成部署文件,部署到sqlserver,再通过sqlserver计划作业来执行. 2.也可以通过shell来调用dtsx ,通过windows计划任务来定时调用exe. 不论是哪 ...
- DirectX小记
1.关于SetViewPort 如果不调用SetViewPort,那么设备对应的ViewPort是什么. 2.关于多线程渲染 如果逻辑线程和渲染线程分开, 则存在两种渲染方式 a.逻辑线程一次性提交渲 ...
- 一些用于数据整理的excel函数
我们经常要从外部数据源(如数据库.文本文件或网页等)将数据导入excel中,但是此类数据往往比较混乱,无法满足我们的要求,因此在进行数据分析之前,需要将这些数据进行整理清洗,excel由于将数据的管理 ...
- hdu 1829 A Bug's Life(分组并查集(偏移量))
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 你不知道的JavaScript--值得你挑战的JavaScript面试题(45题)
1,以下表达式的运行结果是: ["1","2","3"].map(parseInt) A.["1","2&qu ...
- OC 实例方法和类方法区别
Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工 ...