【120820测试】绵阳中学NOIP练习题
绵阳中学NOIP练习题
|
题号 |
题目描述 |
程序文件 |
输入文件 |
输出文件 |
时限 |
|
1 |
奶牛大集会 |
gather.pas/cpp |
gather.in |
gather.out |
1s |
|
2 |
最小函数值 |
minval.pas/cpp |
minval.in |
minval.out |
1s |
|
3 |
旅行 |
travel.pas/cpp |
travel.in |
travel.out |
1s |
题目一览
Problem 1 :奶牛大集会
(gather.pas/c/cpp)
Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。
每个奶牛居住在 N(1<=N<=100,000) 个农场中的一个,这些农场由N-1条道路连接,并且从任意一个农场都能够到达另外一个农场。道路i连接农场A_i和B_i(1 <= A_i <=N; 1 <= B_i <= N),长度为L_i(1 <= L_i <= 1,000)。集会可以在N个农场中的任意一个举行。另外,每个牛棚中居住者C_i(0 <= C_i <= 1,000)只奶牛。
在选择集会的地点的时候,Bessie希望最大化方便的程度(也就是最小化不方便程度)。比如选择第X个农场作为集会地点,它的不方便程度是其它牛棚中每只奶牛去参加集会所走的路程之和,(比如,农场i到达农场X的距离是20,那么总路程就是C_i*20)。帮助Bessie找出最方便的地点来举行大集会。
考虑一个由五个农场组成的国家,分别由长度各异的道路连接起来。在所有农场中,3号和4号没有奶牛居住。
1 3 4 5
@--1--@--3--@--3--@[2]
[1] |
2
|
@[1]
2
Bessie可以在五个农场中的任意一个举办集会,下面就是在每个位置举办集会的不方便值的统计表。
集会地点 ----- 不方便程度 ------
B1 B2 B3 B4 B5 Total
1 0 3 0 0 14 17
2 3 0 0 0 16 19
3 1 2 0 0 12 15
4 4 5 0 0 6 15
5 7 8 0 0 0 15
如果Bessie在农场1举办集会,那么每个农场各自的不方便值分别是
农场 1 0 -- 到达不需要时间!
农场 2 3 -- 总的距离是 2+1=3 x 1 奶牛 = 3
农场 3 0 -- 没奶牛!
农场 4 0 -- 没奶牛!
农场 5 14 -- 总的距离是 3+3+1=7 x 2 奶牛 = 14
因此,总的不方便值是17。
最小的不方便值是15,当在3号,4号或者5号农场举办集会的时候。
题目名称: gather
输入格式
* 第一行:一个整数N
* 第二到N+1行:第i+1行有一个整数C_i
* 第N+2行到2*N行,第i+N+1行为3个整数:A_i,B_i和L_i。
样例输入(gather.in):
5
1
1
0
0
2
1 3 1
2 3 2
3 4 3
4 5 3
输出格式:
* 第一行:一个值,表示最小的不方便值。
样例输出(gather.out):
15
30%的数据n<=20
50%的数据n<=5000
80%的数据n<=50000
100%的数据n<=100000
这一题要用到带权中位数的思想,还要用到树的知识点,题目难度有点大,暴搜的话能的50分左右
http://www.cnblogs.com/oijzh/archive/2012/08/21/2649615.html
Problem 2 :最小函数值
(minval.pas/c/cpp)
有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x^2+Bi*x+Ci(x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。
输入数据
第一行输入两个正整数n(n<=10000)和m(m<=10000)。
以下n行每行三个正整数,其中第i行的三个数分别位Ai、Bi和Ci。输入数据保证0<Ai<=10,0<Bi<=100,0<Ci<=10 000。
输出数据
输出将这n个函数所有可以生成的函数值排序后的前m个元素。
这m个数应该输出到一行,用空格隔开。
样例输入
3 10
4 5 3
3 4 5
1 7 1
样例输出
9 12 12 19 25 29 31 44 45 54
20%的数据n<=100
100%的数据n<=10000
90%的数据9000<=m<=10000
很容易想到的算法就是每个函数算m个,然后全部快排,O(n*m*log2(m*n)) ,RP能AC
最优方法是用堆进行优化
http://www.cnblogs.com/oijzh/archive/2012/08/21/2649515.html
Problem 3 :旅行
(travel.pas/c/cpp)
有N个城市,其中第i个城市的人口为 ,所有城市的人口都小于等于1000。为了鼓励人们从人口多的城市转移向人口少的城市,规定从城市A到城市B所需要支付的过路费为 ,现在你要从1号城市出发,不重复的遍历其余N-1个城市,最后回到1号城市,要求制定一个遍历的顺序使得最后支付的总过路费最少.
输入数据
第一行输入一个正整数n。
以下一行n个正整数,其中第i个数表示 i。
输出数据
一个数,为最小费用
样例输入
3
7 2 7
样例输出
4778
40%的数据n<=10
100%的数据n<=100
最后这一题暴搜能得点分,想AC的话要用动规解决
http://www.cnblogs.com/oijzh/archive/2012/08/21/2649510.html
浙公网安备 33010602011771号