最后一天。。有些感慨,这七天被虐的感动万分

第一题:

题目大意:

求出 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 解题报告的更多相关文章

  1. 常州培训 day5 解题报告

    第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...

  2. 常州培训 day6 解题报告

    第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...

  3. 常州培训 day4 解题报告

    第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...

  4. 常州培训 day3 解题报告

    第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...

  5. 常州培训 day2 解题报告

    第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...

  6. 常州培训 day1 解题报告

    第一题:(骗分容易,AC难.) 题目大意: 给出一个字符串,找出满足条件A的区间的个数.A:字符A,B,C的出现次数相同. 都出现0次也算,区间的长度可以是0(就是只有一个数).30% |S| ≤ 1 ...

  7. 「2017 山东三轮集训 Day7 解题报告

    「2017 山东三轮集训 Day7」Easy 练习一下动态点分 每个点开一个线段树维护子树到它的距离 然后随便查询一下就可以了 注意线段树开大点... Code: #include <cstdi ...

  8. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  9. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

随机推荐

  1. 动态替换fragment

    // [1]获取手机的宽和高 windommanager WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); in ...

  2. FSL安装

    本文介绍如何安装医学图像处理软件fsl. 安装环境:Win8和Ubuntu 14.04 LTS(双系统和虚拟机皆可) 1. 安装ubuntu 14.04 LTS 2. 打开终端,设置ip代理:expo ...

  3. JavaScript变量——栈内存or堆内存

    原文  http://blog.csdn.net/xdd19910505/article/details/41900693 堆和栈这两个字我们已经接触多很多次,那么具体是什么存在栈中什么存在堆中呢?就 ...

  4. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  5. 【转载】【Centos linux系统】命令行(静默)安装oracle 11gR2

    [原文]:http://blog.chinaunix.net/uid-23886490-id-3565998.html 一.安装前准备 1.内存及swap要求 至于swap如何添加,后文将提到 gre ...

  6. Sqlserver_自定义函数操作

    use Test go if exists( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'gettime') AND type in ...

  7. 转!!sql server 数据库 索引的原理与应用

    索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...

  8. phalcon: queueing使用心得,需要安装相应的软体

    http://flyhighest.com/archives/50 原本没有用过phalcon的消息队列,本来以为很简单,结果搞了半天,把步骤记录一下. phalcon的官网上没有说需要安装beans ...

  9. 十问 Linux 虚拟内存管理 (glibc) (二)

    版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...

  10. 三种语言(c++、as、lua)中函数的差异性

    对于不同的语言, 尤其是静态语言和动态语言, 对于函数的定义(即如何看待一个函数)和处理截然不同.具体来说可以分为两类: 1.将函数视为第一类型值, 即函数和其他的对象一样, 都是语言中一个普通的对象 ...