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

第一题:

题目大意:

求出 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. JavaScript基础知识点

    本书目录 第一章:  JavaScript语言基础 第二章:  JavaScript内置对象第三章:  窗口window对象第四章:  文档document对象第五章:  表单form对象第六章:   ...

  2. Docker-网络基础配置

    从外部访问容器 指定容器端口随机映射主机端口 [root@wls12c /]$ docker run -p -d --name web tomcat /bin/bash -c /root/apache ...

  3. heaters

    https://leetcode.com/problems/heaters/ 开始的时候,下面的代码对于两边数字完全一样的情况,测试不通过.原因是heater会有重复情况,这时候对于飘红部分就不会往前 ...

  4. hostapd源代码分析(一):网络接口和BSS的初始化

    [转]hostapd源代码分析(一):网络接口和BSS的初始化 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004349 最近在做一 ...

  5. Android ViewPager更新数据

    ViewPager也是一个常用的组件 与ListView类似 当绑定数据后 想刷新数据 需要在适配器中添加如下方法 protected PagerAdapter galleryAdapter = ne ...

  6. Android 视频投射之NanoHTTPD

    Android 视频投射之NanoHTTPD 号称用一个java文件实现Http服务器 有必要对其源码及例子进行分析 public abstract class NanoHTTPD { //异步执行请 ...

  7. 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法

    有一次,在使用DbVisualizer工具连接自己linux虚拟机上的DB2数据库时,报如下错误: Product: DbVisualizer Pro 9.1 Build: #2050 (2013/0 ...

  8. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  9. windows多线程框架

    #include <iostream> #include <windows.h> using namespace std; HANDLE hMutex; //public : ...

  10. java 集合(Map)

    -------------------|Map  储存的数据都是以键值对的形式,键不可重复,值可重复. ----------------------------| HashMap ---------- ...