prime

数论

题意:分别求 1*n、2*n、3*n、... n*n 关于模 p 的逆元。p 是质数,n < p。

初步解法:暴力枚举。因为 a 关于模 p 的逆元 b 满足 ab mod p = 1,而 b < p,所以可以枚举 b。但是由于没有用 long long 导致爆零。

(下文用 ie(x) 表示 x 关于题目中 p 的逆元,且下文中的运算均在 mod p 的前提下)

)最后再用线性时间求出 ie(a*n)=ie(a)*ie(n)。

注释:ie 是积性函数,(不严谨的)证明如下:

设 x 是 a 关于 p 的逆元,y 是 b 关于 p 的逆元,即 xa mod p = yb mod p = 1,则

xayb mod p = 1

 (ab)*(xy) mod p = 1

即 xy 是 ab 关于模 p 的逆元,即 ie(ab) = xy = ie(a)*ie(b)。

 
 

color

线段树

,然后端点1被涂成颜色2,端点2被涂成颜色3,则询问区间 [1, 2] 时总的颜色种数为 3。颜色总数少于 60 种。

初步解法:直接普通的点线段树,写了三个多小时还是爆零。

正解:最棘手的问题就是两个相邻点之间的开区间的颜色如何保存。其实也很简单:将每个区间的左右端点扩大到原来的两倍,则区间的中点就可以用来表示中间这段开区间。所以正解不过就是把区间端点扩大两倍然后进行普通的点线段树操作即可。

即可。

 
 

threefour

树形动规

题意:假设在一棵有根树上存在五个互不相同的节点,分别记为 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的顺序只算作一种。现在给定一棵以 1 号节点为根的树,求满足上述要求的"不三不四树"的总数。输出答案mod 1234567891后的结果。

初步解法:考场上写完第二题已经只有 15 分钟了,直接写了个 rand() 骗分然后打扫雷去了。

正解:其实是比较明显的树形 DP 题。

「不三不四树」的最终形态是这样的:

(两节点不一定相邻,中间可以隔几个点)

用 f(x, 0) 表示在以 x 为根的子树中(包括 x)任选一个,一共有多少种方案;用 f(x, 1) 表示在以 x 为根的子树中(包括 x)任选三个,一共有多少种方案;用 f(x, 2) 表示在 x 的左右子树中各选三个,一共有多少种方案(x 的左右子树各选 3 个对应了「不三不四树」的底下两层,x 作为「不三不四树」的第二层)。

很明显,f(x, 0) 即以 x 为根的整棵子树的节点数。

f(x, 1) = sum{ f(i, 0)*f(j, 0) } + sum{ (k, 1) } i, j, k 是 x 的子节点

解释一下:f(x, 1) 表示在整棵子树中任选三个构成一棵满二叉树的方案数,那么有两种情况:构成的树的根节点是 x 或不是 x。如果构造出的树的根节点是 x,那么再在不同的两棵子树中各选 1 个即可,由乘法原理,可得上式的第一部分;如果根节点不是 x,那么根节点必然在子树中,所以加上子结点的 f(x, 1) 即可。

f(x, 2) = sum{ f(i, 1)*f(j, 1) }

由于 f(x, 2) 表示构造出的树以 x 为根,所以不用加上子树的 f(x, 2),用类似于上面那个递推式的第一部分的方法计算。

则最终答案为 ans = sum{ f(x, 2)*depth(x) },depth 从 0 开始计算。(depth(x) 就代表了 x 有多少个祖先结点,x 的任意一个祖先结点都可以作为整棵「不三不四树」的根)

省常中模拟 Test4的更多相关文章

  1. 省常中模拟 day1

    第一题: 题目大意: 给出N个数的数列,如果相邻的两个数加起来是偶数,那么就可以把这两个数消掉,求最多能消掉多少数. 解题过程: 1.先自己手工模拟了几组数据,发现不管消除的顺序如何,最终剩下的是一定 ...

  2. 省常中模拟 Test2 Day2

    two 模拟 大意:给你一个 N 位二进制数,有四种操作:加1.减1.乘2.整除2.给定一个操作序列,求最终结果.N <= 5*10^6.数据保证不会在最高位上进行进位或退位操作. 初步解法:由 ...

  3. 省常中模拟 day2

    第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...

  4. 省常中模拟 Test3 Day1

    tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...

  5. 省常中模拟 Test3 Day2

    matrix 找规律 题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反:2. 将某列上的所有数字取反:3. 输出 sum{ a[i][j]*a[ ...

  6. 省常中模拟 Test1 Day1

    临洮巨人 排序 题意:在字符串中找出 A.B.C 三个字母出现次数相同的区间个数. 初步的解法是前缀和,用 a(i), b(i), c(i) 表示在位置 i 之前(包括 i)各有 字母 A.B.C 多 ...

  7. 如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?

    1 什么是联合? 联合(Union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的.每个数据成员都在相同的内存地址开始.分配给联合的存储区数量是“要包含它最大的数据成员”所需的内存数. ...

  8. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  9. 在C#中模拟Javascript的setTimeout方法

    在C#中模拟Javascript的setTimeout方法 背景 每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javasc ...

随机推荐

  1. Oracle数据库表的备份和数据表的删除操作

    --Oracle数据库中的表备份: --备份语句:在备份之后就可以将这张表的所有数据源删除了,但是之后有人对这张表的数据进行操作,但是在操作完成之后要记得将数据表恢复 CREATE TABLE DZH ...

  2. 【CodeForces】【#286】Div.2

    T_T越来越水了,这次只做出A+B. A题为了代码简单直接枚举(插入位置和插入字符) //CF #286 Div.2 A #include<vector> #include<stri ...

  3. watch your tone

    老板要求邮件注意语气... 木想到混了这么久这种事情还要老板提醒

  4. C# Socket服务器端如何判断客户端断开

    使用Socket类中的Poll方法,就可以. Socket client //假如已经创建好了,连接到服务器端得Socket的客户端对象. 我们只要client.Poll(10,SelectMode. ...

  5. 【WCF--初入江湖】07 分布式事务

    07 分布式事务 一.前言 [1]理解事务特性 [2]掌握TransactionFlow 特性 [3]掌握WCF中的事务属性 TransactionAutoCompleteOnSessionClose ...

  6. codeforces 397B

    #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #includ ...

  7. windows cmd控制台打开和关闭SqlServer 以及 显示发生系统错误5 拒绝访问的解决方案

    打开:net start mssqlserver 关闭:net stop mssqlserver 在dos下输入 net start mssqlserver 显示发生系统错误5 拒绝访问 解决办法,以 ...

  8. H5 移动Web框架集合

    http://frozenui.github.io/  一个简洁的h5前端框架 http://weui.github.io/weui/ 腾讯出的WebUI 风格是基于微信

  9. 读写txt文件

    public void SetUpdateTime(string strNewDate) { try { var path =Application.StartupPath + Configurati ...

  10. c# 组元(Tuple)

    组元是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.组元使用泛型来简化一个类的定义. 先以下面的一段代码为例子: public class Poin ...