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 冬令营 ...
随机推荐
- MFC下的DLL编程学习
1.DLL库与LIB库对比: 静态链接库Lib(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部.如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造 ...
- Git配置技巧及常用命令总结
如果你想精通Git,直接到 Git官网 把这本ProGit掌握已足以Pro Git 配置用户信息 user和email,--global参数全局配置,当然你也可以不加此参数,不同的项目用不同的用户名和 ...
- php柱状图多系列动态实现
<?php require_once 'data.php'; require_once 'jpgraph/src/jpgraph.php'; require_once"jpgraph/ ...
- Vue 服务器端渲染(一)
什么是服务器端渲染(SSR)? Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲染为服务器端的 HT ...
- 【Hadoop】配置环境-伪分布式
目录 1.Linux设置静态IP地址 2.修改主机名和映射文件 3.SSH免密码配置 4.Linux系统JDK的安装和配置 5.Hadoop伪分布式配置和测试 1.Linux设置静态IP地址 1.在L ...
- (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)
(原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...
- java入门---简介&简单输出小例子&开发前准备
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.J ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- 2.PostgreSQL安装详细步骤(windows)【转】
感谢 Junn9527 PostgreSQL安装:一.windows下安装过程安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下:1.开始安装 ...
- ubuntu 关闭触控板
第一种: 1 sudo rmmod psmouse 这个是禁用的 2 sudo modprobe psmouse 这个是启用的 这个方法很便捷,但是会将触点和触板都禁用了,一般还是希望保持触点是 ...