好文档 - 专业文书写作范文服务资料分享网站

CCF NOIP2013 解题报告&心得

天下 分享 时间: 加入收藏 我要投稿 点赞

全国信息学奥林匹克联赛(NOIP2013)复赛 提高组 day1

CCF NOIP2013

解题报告&心得

虽然已经过去很久了,但是终于有机会有时间写一下解题报告

——By 黄锦松 FJ-0318 泉州五中

NOIP 2013 成绩单 姓名 准考证号 总分 circle match truck block flower puzzle 黄锦松 FJ-0318 225 100 10 0 10 100 5

我拿到了225分,(坑爹地传错了一题,还是最简单的Day2的block,我的100分啊!!!),在我大福建只有三等奖,即使全国省一等奖基准线只有200,今年的分数线变高了,我欣喜中国未来的计算机产业的良好发展势头。我只是其中微不足道的一员,我觉得我是一个奇怪的人,别人都是数学+信息,我是化学+信息。我觉得我大学应该是会去读化学了,信息产业的舞台就留给大家去表演了。

第 1 页共 4 页

全国信息学奥林匹克联赛(NOIP2013)复赛 提高组 day1

切入正题******

CCF 全国信息学奥林匹克联赛(NOIP2013)复赛

提高组 day1

(请选手务必仔细阅读本页内容)

一.题目概况 中文题目名称 转圈游戏 火柴排队 货车运输 英文题目与子目录circ matctru名 可执行文件名 circ matctru输入文件名 circle.in match.in truck.in 输出文件名 circle.out match.out truck.out 每个测试点时限 1 1 1 秒 秒 秒 测试点数目 10 10 20 每个测试点分值 10 10 5 附加样例文件 有 有 有 结果比较方式 全文比较(过滤行末空格及文末回车) 题目类型 传 传传运行内存上限 128M 128M 128M 二.提交源程序文件名 对于 C++语言 circle.cpp match.cpp truck.cpp 对于 C 语言 circle.c match.c truck.c 对于 pascal 语言 circle.pas match.pas truck.pas 三.编译命令(不包含任何优化开关) 对于 C++语言 g++ -o g++ -o match g++ -o circle match.cpp -lm truck 对于 C 语言 gcc-o circle gcc-o match gcc-o truck circle.c match.c – truck.c 对于 pascal 语fpc fpc match.pas fpc truck.pas 言

注意事项:

1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+,

第 2 页共 4 页

全国信息学奥林匹克联赛(NOIP2013)复赛 提高组 day1

2.71GHz,内存 2G,上述时限以此配置为准。 4、只提供 Linux 格式附加样例文件。 5、特别提醒:评测在 NOI Linux 下进行。

第 3 页共 4 页

全国信息学奥林匹克联赛(NOIP2013)复赛

提高组 day2

1.转圈游戏 (circle.cpp/c/pas)

【问题描述】

n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从 0 到 n-1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类 推。

游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第n ? m号位置上的小伙伴走到第 0 号位置,第n-m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第m-1 号位置。

现在,一共进行了 10k 轮,请问 x 号小伙伴最后走到了第几号位置。

【输入】

输入文件名为 circle.in。

输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。

【输出】

输出文件名为 circle.out。 输出共 1 行,包含 1 个整数,表示 10k 轮后 x 号小伙伴所在的位置编号。

【输入输出样例】 circle.in 10 3 4 5

【数据说明】

对于 30%的数据,0 < k < 7; 对于 80%的数据,0 < k < 107;

对于 100%的数据,1 < n< 1,000,000,0

对于转圈游戏(快速幂)

根据题目,答案明显是(x+10^km) mod n,化简一下,就成了(x + m (10^k mod n) mod n) mod n,所以,只需要求出10^k mod n即可,可以使用快速幂来求解,复杂度O(log k)。

本人代码(100分)

var n,m,k,x,g,t,r,i:longint;

a:array[0..1000000]of longint; begin

assign(input,'circle.in'); reset(input);

assign(output,'circle.out'); rewrite(output);

第 1 页共 5 页

circle.out 5 全国信息学奥林匹克联赛(NOIP2013)复赛

提高组 day2

readln(n,m,k,x); g:=k; t:=0;

while g<>0 do begin

inc(t);

a[t]:=g mod 2; g:=g div 2; end;

r:=1;

for i:=t downto 1 do begin

k:=(r*r) mod n;

if a[i]<>0 then r:=((10*k)mod n)mod n else r:=k; end;

for i:=1 to r do x:=(x+m)mod n; writeln(x);

close(input); close(output); end.

2.火柴排队 (match.cpp/c/pas)

【问题描述】

涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:

,其中 ai 表示第一列火柴中第 i 个火柴的高度,bi 表示第二列火

柴中第 i 个火柴的高度。

每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最 小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结果。

【输入】

输入文件为 match.in。

共三行,第一行包含一个整数 n,表示每盒中火柴的数目。 第二行有 n 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。 第三行有 n 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。

【输出】

输出文件为 match.out。

输出共一行,包含一个整数,表示最少交换次数对 99,999,997 取模的结果。

第 2 页共 5 页

CCF NOIP2013 解题报告&心得

全国信息学奥林匹克联赛(NOIP2013)复赛提高组day1CCFNOIP2013解题报告&心得虽然已经过去很久了,但是终于有机会有时间写一下解题报告——By黄锦松FJ-0318泉州五中NOIP2013成绩单姓名准考证号总分ci
推荐度:
点击下载文档文档为doc格式
9vrw51red50vngk59eqe
领取福利

微信扫码领取福利

微信扫码分享