- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP 2011 day2 题解
美少女战士原创
总的来说,第二天的题还是比较难的,至少让我错了好多
1.计算系数
(factor.cpp/c/pas)
【问题描述】
给定一个多项式(ax + by)k,请求出多项式展开后xn ym项的系数。
【输入】
输入文件名为 factor.in。
共一行,包含 5 个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。
【输出】
输出文件名为 factor.out。
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果
【输入输出样例】
factor.in
1 1 3 1 2
factor.out
3
【数据范围】
对于 30%的数据,有0≤k≤10;
对于 50%的数据,有a = 1,b = 1;
对于 100%的数据,有0≤k≤1,000,0≤n, m≤k,且n + m = k,0≤a,b≤1,000,000
这道题其实用到了二项式定理,题目所求及为C(K,N)*a^n*b^m mod 10007
a^n和b^m 都比较容易求,每乘一次就模10007,甚至都用不到幂运算
C(K,N)如何求呢?直观的来说,它应该是K!/(N!*(K-N)!)但是,这样一来,我们就不得不用高精度了,因为这样不能每一次都摸,但高进度之后,取模就显得麻烦了,所以我们想到了杨辉三角,C【k,n]:=c[k-1,n]+c[k-1,n-1];这样就可以保证在长整形的范围中了,
(至于这个千万不要递归求解,层数太深了,1000×1000 宁愿开数组)
那么就不多说了,对于一道送分题,大家还是不要太认真了
下面给出标程
var
c:array[0..1000,0..1000]of longint;
n,m,a,b,k,i,j,ans:longint;
function fang(a,b:longint):longint;var i:longint;j:int64;
begin
j:=1;for i:=1 to b do j:=j*a mod 10007;exit(j);
end;
begin
assign(input,factor.in);assign(output,factor.out);
reset(input);rewrite(output);
readln(a,b,k,n,m);
for i:=1 to k do begin c[i,0]:=1;c[i,i]:=1;end;
for i:=2 to k do for j:=1 to i-1 do c[i,j]:=(c[i-1,j-1]+c[i-1,j]) mod 10007;
ans:=fang(a,n)*fang(b,m) mod 10007;ans:=ans*c[k,n] mod 10007;
writeln(ans);close(input);close(output);
end.
2.聪明的质监员
(qc.cpp/c/pas)
【问题描述】
小 T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n 个矿石,从1
到n 逐一编号,每个矿石都有自己的重量wi 以及价值vi。检验矿产的流程是:
1、给定m 个区间[Li,Ri];
2、选出一个参数W;
3、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值
Y 1* v , [ , ] i i j ∈ L R 且w W j ≥ ,j 是矿石编号//
这块复制不上,题意就是重量大于等于标准的矿产个数与这些矿产价值和的乘积
这批矿产的检验结果Y 为各个区间的检验值之和。
若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T
不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近
标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。
【输入】
输入文件qc.in。
第一行包含三个整数 n,m,S,分别表示矿石的个数、区间的个数和标准值。
接下来的 n 行,每行2 个整数,中间用空格隔开,第i+1 行表示i 号矿石的重量wi 和价
值vi 。
接下来的 m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li,
Ri]的两个端点Li 和Ri。注意:不同区间可能重合或相互重叠。
【输出】
输出文件名为 qc.out。
输出只有一行,包含一个整数,表示所求的最小值。
【输入输出样例】
qc.in
5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
qc.out
10
【输入输出样例说明】
当 W 选4 的时候,三个区间上检验值分别为20、5、0,这批矿产的检验结果为25,此
时与标准值S 相差最小为10。
【
文档评论(0)