【日常考试】2016.3.2 备战NOIP2014模拟赛1 前两题
2016-03-07 13:38
260 查看
备战Noip2014模拟赛1(什么鬼。。。)
【注意事项】:请自行完成题目,切勿讨论。
题1 排名系统
【问题描述】
F1的影响力越来越大,因此国际汽联决定扩大规模,让更多有天赋的车手加入这一行列。
不过规模的扩大带来了一系列问题,比如排名系统。由于参赛人数过多,排名系统要运行很久才能够得出结果。
车迷们非常愤怒,强烈要求修改系统。于是,汽联召开紧急会议,决定在短期内重新编写该系统。
F1排名的标准是:每场比赛的前八名可获得积分,从第一名到第八名分别获得:10,8,6,5,4,3,2,1个积分,车手总积分是该车手各场比赛获得的积分之和。每场比赛过后,排名系统都会将当前的车手总积分从大到小排序,若积分相等则编号小的车手排在前面。
你的任务就是要编写这一系统。不过车迷们常常只关注第一名,因此,你只需在每场比赛过后输出排名第一的车手的编号即可。
【输入文件】
输入文件rank.in。第一行是两个整数n,m(8<=n<=1000000,1<=m<=1000000),分别表示车手数和比赛场数。接下来m行,每行八个整数,第i行第j个是rij(1<=rij<=n),表示第i场比赛获得第j名的车手的编号。
【输出文件】
输出文件rank.out。m行,第i行是一个整数ci,表示第i场比赛结束后排名第一的车手的编号。
【样例输入】
143
1 4 14 8 10 6 12 7
4 6 14 8 3 11 1 13
1 11 14 8 10 3 9 12
【样例输出】
1
4
1
【数据规模】
30%的数据满足n<=1000,m<=1000
每一场比赛过后总积分排名第一的车手一定是之前排名第一的车手或该场比赛中有得分的车手中的一位,因此用数组记录每位车手的总积分,但每次只比较上述9名车手即可。时间复杂度O(m)。
我会说我考试的时候把八个看成七个吗!!
定义:水题一枚
(我的做法和题解不同。。。只能说数据水了)
const jf:array[1..8] of integer=(10,8,6,5,4,3,2,1);
var n,m,t,i,max,j,x:longint;
r:array[1..8] of longint;
b,f,c:array[1..1000001] of longint;
begin
assign(input,'rank.in');reset(input);
assign(output,'rank.out');rewrite(output);
readln(n,m);
t:=0;
for i:=1 to m do begin
for j:=1 to 8 do read(r[j]);
readln;
for j:=1 to 8 do begin
if f[r[j]]=0 then begin
inc(t);
b[t]:=jf[j];
f[r[j]]:=1;
c[r[j]]:=t;
if (b[t]>max)or((b[t]=max)and(r[j]<x)) then begin
max:=b[t];
x:=r[j];
end;
end else begin
inc(b[c[r[j]]],jf[j]);
if (b[c[r[j]]]>max)or((b[c[r[j]]]=max)and(r[j]<x)) then begin
max:=b[c[r[j]]];
x:=r[j];
end;
end;
end;
writeln(x);
end;
close(input);
close(output);
end.
题2历史事件
【问题描述】
一些历史迷们打算把历史上的一些大事件按时间顺序列出来。但是,由于资料不全,每个事件发生的具体时间都没有找到。幸运的是,他们记得一些事件之间的先后关系。他们把事件分别编号1,2,3,……n,然后把一些先后关系列出。不过,这些复杂的先后关系仍然把他们难倒了。你能够帮助他们吗?
【输入文件】
输入文件event.in。第一行是两个整数n,m(1<=n<=1000,1<=m<=100000),分别表示事件数和已知的先后关系数。接下来m行,第i行是两个整数xi,yi(1<=xi,yi<=n),表示事件xi比事件yi先发生。
【输出文件】
输出文件event.out。按事件发生的时间顺序列出事件的编号,每行一个,若存在多种可能,输出第一个事件编号最小的,若第一个事件编号相同,则输出第二个事件编号最小的……;若没有满足条件的编号序列,输出一行’Error!’)。
【样例输入】
3 2
1 2
1 3
【样例输出】
1
2
3
本题由于是纯拓扑排序题,已在新文拓扑排序专题中提及,敬请留意
30+0完挂(第一题竟然还有30我也是醉了。。。)
题目名称 | 排名系统 | 历史事件 | 山区考察 | 机房病毒 |
存盘文件名 | rank.pas | event.pas | mountain.pas | Virus.pas |
输入文件名 | rank.in | event.in | mountain.in | Virus.in |
输出文件名 | rank.out | event.out | mountain.out | Virus.out |
时限 | 1s | 1s | 1s | 1s |
内存限制 | 64M | 64M | 64M | 64M |
题1 排名系统
【问题描述】
F1的影响力越来越大,因此国际汽联决定扩大规模,让更多有天赋的车手加入这一行列。
不过规模的扩大带来了一系列问题,比如排名系统。由于参赛人数过多,排名系统要运行很久才能够得出结果。
车迷们非常愤怒,强烈要求修改系统。于是,汽联召开紧急会议,决定在短期内重新编写该系统。
F1排名的标准是:每场比赛的前八名可获得积分,从第一名到第八名分别获得:10,8,6,5,4,3,2,1个积分,车手总积分是该车手各场比赛获得的积分之和。每场比赛过后,排名系统都会将当前的车手总积分从大到小排序,若积分相等则编号小的车手排在前面。
你的任务就是要编写这一系统。不过车迷们常常只关注第一名,因此,你只需在每场比赛过后输出排名第一的车手的编号即可。
【输入文件】
输入文件rank.in。第一行是两个整数n,m(8<=n<=1000000,1<=m<=1000000),分别表示车手数和比赛场数。接下来m行,每行八个整数,第i行第j个是rij(1<=rij<=n),表示第i场比赛获得第j名的车手的编号。
【输出文件】
输出文件rank.out。m行,第i行是一个整数ci,表示第i场比赛结束后排名第一的车手的编号。
【样例输入】
143
1 4 14 8 10 6 12 7
4 6 14 8 3 11 1 13
1 11 14 8 10 3 9 12
【样例输出】
1
4
1
【数据规模】
30%的数据满足n<=1000,m<=1000
每一场比赛过后总积分排名第一的车手一定是之前排名第一的车手或该场比赛中有得分的车手中的一位,因此用数组记录每位车手的总积分,但每次只比较上述9名车手即可。时间复杂度O(m)。
我会说我考试的时候把八个看成七个吗!!
定义:水题一枚
(我的做法和题解不同。。。只能说数据水了)
const jf:array[1..8] of integer=(10,8,6,5,4,3,2,1);
var n,m,t,i,max,j,x:longint;
r:array[1..8] of longint;
b,f,c:array[1..1000001] of longint;
begin
assign(input,'rank.in');reset(input);
assign(output,'rank.out');rewrite(output);
readln(n,m);
t:=0;
for i:=1 to m do begin
for j:=1 to 8 do read(r[j]);
readln;
for j:=1 to 8 do begin
if f[r[j]]=0 then begin
inc(t);
b[t]:=jf[j];
f[r[j]]:=1;
c[r[j]]:=t;
if (b[t]>max)or((b[t]=max)and(r[j]<x)) then begin
max:=b[t];
x:=r[j];
end;
end else begin
inc(b[c[r[j]]],jf[j]);
if (b[c[r[j]]]>max)or((b[c[r[j]]]=max)and(r[j]<x)) then begin
max:=b[c[r[j]]];
x:=r[j];
end;
end;
end;
writeln(x);
end;
close(input);
close(output);
end.
题2历史事件
【问题描述】
一些历史迷们打算把历史上的一些大事件按时间顺序列出来。但是,由于资料不全,每个事件发生的具体时间都没有找到。幸运的是,他们记得一些事件之间的先后关系。他们把事件分别编号1,2,3,……n,然后把一些先后关系列出。不过,这些复杂的先后关系仍然把他们难倒了。你能够帮助他们吗?
【输入文件】
输入文件event.in。第一行是两个整数n,m(1<=n<=1000,1<=m<=100000),分别表示事件数和已知的先后关系数。接下来m行,第i行是两个整数xi,yi(1<=xi,yi<=n),表示事件xi比事件yi先发生。
【输出文件】
输出文件event.out。按事件发生的时间顺序列出事件的编号,每行一个,若存在多种可能,输出第一个事件编号最小的,若第一个事件编号相同,则输出第二个事件编号最小的……;若没有满足条件的编号序列,输出一行’Error!’)。
【样例输入】
3 2
1 2
1 3
【样例输出】
1
2
3
本题由于是纯拓扑排序题,已在新文拓扑排序专题中提及,敬请留意
30+0完挂(第一题竟然还有30我也是醉了。。。)
相关文章推荐
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- 用javascript和css模拟select的脚本
- PHP模拟asp.net的StringBuilder类实现方法
- C#使用ImitateLogin模拟登录百度
- javascript用层模拟可移动的小窗口
- 自编jQuery插件实现模拟alert和confirm
- JS模拟按钮点击功能的方法
- PHP模拟asp中response类实现方法
- 模拟Spring的简单实现
- 提高 DHTML 页面性能
- javascript 模拟点击广告
- JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
- php实现模拟post请求用法实例
- JavaScript实现MIPS乘法模拟的方法
- 模拟xcopy的函数
- JS模拟实现Select效果代码
- php模拟服务器实现autoindex效果的方法
- 动态载入js提高网页打开速度的方法
- C# SendInput 模拟鼠标操作的实现方法
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法