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 冬令营 ...
随机推荐
- 通过Ops Manager安装管理mongodb-3.4集群
node1 Ops Manager,mongodb,agent node2 mongodb,agent node3 mongodb,agent 参考文档 https://docs.opsmanager ...
- keepalived入门
简介 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服 ...
- docker化安装grafana
继续进行docker改造. 1. 找镜像.拉取镜像 [root@devlop ~]# docker search grafana INDEX NAME DESCRIPTION STARS OFFICI ...
- PHP中判断变量为空的几种方法小结
isset 主要用来判断变量是否被初始化过empty 可以将值为 "假"."空"."0"."NULL"." ...
- Idea 2017 激活方法
http://www.cnblogs.com/suiyueqiannian/p/6754091.html
- BigData--hadoop集群搭建之hbase安装
之前在hadoop-2.7.3 基础上搭建hbase 详情请见:https://www.cnblogs.com/aronyao/p/hadoop.html 基础条件:先配置完成zookeeper 准备 ...
- Scrapy之CrawlSpider
问题:如果我们想要对某一个网站的全站数据进行爬取?解决方案: 1. 手动请求的发送 2. CrawlSpider(推荐) CrawlSpider概念:CrawlSpider其实就是Spider的一个子 ...
- Git 克隆指定分支代码
git clone 指定分支 拉代码 1.git clone 不指定分支 git clone http://10.1.1.11/service/sz-service.git 2.git clone ...
- 利用JS调取电脑摄像头,实现拍照功能
1.调取电脑摄像头非常简单,看代码一幕了然 window.addEventListener("DOMContentLoaded", function() { var canvas ...
- Java:Random函数及其种子的作用
伪随机(preundorandom):通过算法产生的随机数都是伪随机!! 只有通过真实的随机事件产生的随机数才是真随机!!比如,通过机器的硬件噪声产生随机数.通过大气噪声产生随机数 Random生成的 ...