XJOI NOIP模拟题2
第一题

组合计数
分析:
从前往后一位一位的计算
先算第一位比t小的数目,再算第一位与t[1]相同,第2位比t小的个数以此类推
先预处理一个数组h,h[i]表示从1~it串与s串不同的位数
对于第i位,
由于1~i-1与s串一样,故i~n中与s串不同的个数有k-h[i-1]个,设v=k-h[i-1]。
F(i)表示’a'到t[i]中与s[i]不相同字母个数(不包括t[i]),
当s[i]>=t[i]则
第i位开始比t小的数目ANS[i]=F(i)*C(n-i,v-1)*(25)^(v-1)
当s[i]<t[i]则
第i位开始比t小的数目ANS[i]=[F(i)-1]*C(n-i,v-1)*(25)^(v-1) +C(n-i,v)*25^v
输出∑ANS[i]+1即可。
代码:
program t1;
const
num=;
var
a,b:array[..]of char;
d,h,f,g:array[..]of int64;
n,m,v,len,x,y,ans:int64; i:longint;
function get(x,y:int64):int64;
var i:longint; t:int64;
begin
if (x=)or(y=)or(x=y) then exit();
exit(((f[x]*g[x-y]) mod num)*g[y] mod num);
end;
function quick(x,y:int64):int64;
var ans:int64;
begin
ans:=;
while y> do
begin
if y and > then ans:=ans*x mod num;
x:=x*x mod num;
y:=y>>;
end;
exit(ans);
end;
procedure make;
var i:longint;
begin
f[]:=; g[]:=;
for i:= to n do
begin
f[i]:=(f[i-]*i) mod num;
g[i]:=g[i-]*quick(i,num-) mod num;
end;
end;
begin
readln(n,m);
d[]:=; ans:=;
for i:= to m do d[i]:=(d[i-]*) mod num;
for i:= to n do read(a[i]); readln;
for i:= to n do read(b[i]);
for i:= to n do if a[i]<>b[i] then h[i]:=h[i-]+ else h[i]:=h[i-];
for i:=n downto do h[i]:=m-h[i-];
make;
for i:= to n do
begin
if a[i]<b[i] then len:=ord(b[i])-ord('a')-
else len:=ord(b[i])-ord('a');
v:=h[i]; if v= then break;
y:=get(n-i,v-); ans:=ans+((d[v-]*y)mod num*len) mod num;
if (a[i]<b[i])and(n-i>=v) then begin x:=get(n-i,v); ans:=(ans+d[v]*x) mod num; end;
end;
writeln((ans+)mod num);
end.
第二题
第三题


树型DP
分析:
最容易想到的O(n*m*m)的DP,用f[i,j]表示以i为根子树选j个的最大价值,f[i,j]=∑f[k,w[k]] w[k]表示k节点选取的点数,显然这是一个背包
然而这样的效率是不够的。
可以改变思路
XJOI NOIP模拟题2的更多相关文章
- XJOI NOIP模拟题1
第一题 分析: 开始想的是贪心,取每列均值最大一段. 应该是01分数规划,具体看代码 代码: program gold; var a:..]of int64; n,i,m,j,x:longint; f ...
- 【入门OJ】2003: [Noip模拟题]寻找羔羊
这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- NOIP模拟题17.9.26
B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...
- noip模拟题题解集
最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...
- NOIP 模拟题
目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...
- 9.22 NOIP模拟题
吉林省信息学奥赛 2017 冬令营 ...
随机推荐
- springboot在yml配置文件中配置类的属性笔记
首先建立一个简单的实体类,我这里以学生为例,并加上@Component和@ConfigurationProperties(prefix ="student")注解,其中prefix ...
- yum仓库客户端搭建和NTP时间同步客户端配置
一.yum仓库客户端搭建 yum源仓库搭建分为服务器端和客户端. 服务端主要提供软件(rpm包)和yumlist.也就是提供yum源的位置.一般是通过http或者ftp提供位置. 客户端的配置:yum ...
- Python日常运维脚本
1 扫描Windows系统CPU.内存.磁盘利用率 1.1 实现代码 #!usr/bin/env python #-*- coding:utf-8 _*- ""&quo ...
- 【nginx下对服务器脚本php的支持】
安装php7 下载地址:https://secure.php.net/downloads.php这里下载的是:wget http://ar2.php.net/distributions/php ...
- Mysql 查看连接数,状态,最大并发数
MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力:另一种原 ...
- 20145202马超《JAVA》预备作业1
20145202马超<JAVA>预备作业1 你觉得自己专业吗?对专业的期望是什么? 我觉得自己很不专业,我对专业的期望:老师之前讲过德国的一个研究,学习分为5个档次,第三个档是能够自己发现 ...
- java程序——两数的加减乘除
import javax.swing.JOptionPane; // import class JOptionPane public class Elementary { public static ...
- Android开发——告诉你Adapter应该写在Activity里面还是外面
0. 前言 本文转载自AItsuki的博客. 首先说明一下为什么要写这么一篇博客:最近看了一些其他人的项目,发现很多项目的做法是建立一个专门存放Adapter类的Package包,也有的项目干脆直接都 ...
- KMP python实现
首先去 https://blog.csdn.net/starstar1992/article/details/54913261/ 这里看下思想: 然后代码实现,一定要多调试几遍方能看懂: def ge ...
- git使用ssh密钥(转)
git使用https协议,每次pull, push都要输入密码,相当的烦.使用git协议,然后使用ssh密钥.这样可以省去每次都输密码. 大概需要三个步骤:一.本地生成密钥对:二.设置github上的 ...