NOIP2017_提高组复赛试题day2
noip2017提高组复赛解题报告

noip2017提高组复赛解题报告定期推送帐号信息学新闻,竞赛自主招生,信息学专业知识,信息学疑难解答,融科教育信息学竞赛培训等诸多优质内容的微信平台,欢迎分享文章给你的朋友或者朋友圈!以下解题思路及代码未经官方评测,仅供参考,复赛成绩以官方(CCF)评测结果为准。
Day11.小凯的疑惑(math.cpp/c/pas)【问题描述】小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
每种金币小凯都有无数个。
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。
【输入格式】输入文件名为math.in。
输入数据仅一行,包含两个正整数a 和b,它们之间用一个空格隔开,表示小凯手中金币的面值。
【输出格式】输出文件名为math.out。
输出文件仅一行,一个正整数N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
【输入输出样例1】math.in3 7 math.out11【数据规模与约定】对于30%的数据: 1 ≤a,b ≤50。
对于60%的数据: 1 ≤a,b ≤10,000。
对于100%的数据:1 ≤a,b ≤1,000,000,000。
数学太差只找规律吧。
设:其中一个数为2则:2、3=>1;2、5=>3;2、7=>5;2、11=>9得:2、n=>n-2设:其中一个数为3则:3、5=>7;3、7=>11;3、11=>19;3、13=>23得:3、n=>2n-3设:其中一个数为5则:5、7=>23;5、11=>39;5、13=>47;5、17=>63得:5、n=>4n-5所以:m、n=>(m-1)n-m #includeusing namespace std;int main(){ long long a,m,n;scanf('%lld %lld',&m,&n); a=(m-1)*n-m;printf('%lld',a); return 0;} 2.时间复杂度(complexity.cpp/c/pas)【问题描述】小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正确。
noip2017提高组试题

CCF 全国信息学奥林匹克联赛(NOIP2017)复赛提高组 day1(请选手务必仔细阅读本页内容)1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,内存4G,上述时限以此配置为准。
4、只提供Linux 格式附加样例文件。
5、提交的程序代码文件的放置位置请参照各省的具体要求。
6、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。
【问题描述】1.小凯的疑惑(math.cpp/c/pas)小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
每种金币小凯都有无数个。
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。
【输入格式】输入文件名为math.in。
输入数据仅一行,包含两个正整数a 和b,它们之间用一个空格隔开,表示小凯手中金币的面值。
【输出格式】输出文件名为math.out。
输出文件仅一行,一个正整数N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
见选手目录下的math/math1.in 和math/math1.ans。
【输入输出样例1 说明】小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、2、4、5、8、11 的物品,其中最贵的物品价值为11,比11 贵的物品都能买到,比如:12 = 3 * 4 + 7 * 013 = 3 * 2 + 7 * 114 = 3 * 0 + 7 * 215 = 3 * 5 + 7 * 0……【输入输出样例2】见选手目录下的math/math2.in 和math/math2.ans。
noip2017提高组试题(day1+day2)-Word版

全国信息学奥林匹克联赛(2017)复赛提高组 1(请选手务必仔细阅读本页内容)一.题目概况注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、中函数 ()的返回值类型必须是,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存 4G,上述时限以此配置为准。
4、只提供格式附加样例文件。
5、提交的程序代码文件的放置位置请参照各省的具体要求。
6、特别提醒:评测在当前最新公布的下进行,各语言的编译器版本以其为准。
【问题描述】1.小凯的疑惑()小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
每种金币小凯都有无数个。
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。
【输入格式】输入文件名为。
输入数据仅一行,包含两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯手中金币的面值。
【输出格式】输出文件名为。
输出文件仅一行,一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
【输入输出样例 1】见选手目录下的 1 和 1。
【输入输出样例 1 说明】小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、2、4、5、8、11 的物品,其中最贵的物品价值为 11,比 11 贵的物品都能买到,比如:12 = 3 * 4 + 7 * 013 = 3 * 2 + 7 * 114 = 3 * 0 + 7 * 215 = 3 * 5 + 7 * 0……【输入输出样例 2】见选手目录下的 2 和 2。
【数据规模与约定】对于 30%的数据: 1 ≤ a,b ≤ 50。
对于 60%的数据: 1 ≤ a,b ≤ 10,000。
对于 100%的数据:1 ≤ a,b ≤ 1,000,000,000。
NOIP2016提高组复赛试题(Day1+Day2)

第22 届全国青少年信息学奥林匹克联赛2016提高组(复赛)第一试竞赛时间:2016 年11 月19 日 8:30 ∼ 12:00提交源程序文件名编译选项注意事项:1. 文件名(程序名和输入输出文件名)必须使用英文小写。
2. 除非特殊说明,结果比较方式均为忽略行末空格及文末回车的全文比较。
3. 中函数()的返回值类型必须是,程序正常结束时的返回值必须是0。
4. 全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存4G,上述时限以此配置为准。
5. 只提供格式附加样例文件。
6. 评测在下进行。
7. 编译时不打开任何优化选项。
玩具谜题()【问题描述】小南有一套可爱的玩具小人,它们各有不同的职业。
有一天,这些玩具小人把小南的眼镜藏了起来。
小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。
如下图:这时告诉小南一个谜题:“眼镜藏在我左数第3 个玩具小人的右数第1 个玩具小人的左数第2 个玩具小人那里。
”小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。
小南一边艰难地辨认着玩具小人,一边数着:“朝内,左数第3 个是。
“朝外,右数第1 个是。
“朝外,左数第2 个是。
“所以眼镜藏在这里!”虽然成功找回了眼镜,但小南并没有放心。
如果下次有更多的玩具小人藏他的眼镜,或是谜题的长度更长,他可能就无法找到眼镜了。
所以小南希望你写程序帮他解决类似的谜题。
这样的谜题具体可以描述为:有n 个玩具小人围成一圈,己知它们的职业和朝向。
现在第 1 个玩具小人告诉小南一个包含m 条指令的谜题,其中第i 条指令形如“左数/右数第个玩具小人”。
你需要输出依次数完这些指令后,到达的玩具小人的职业。
【输入格式】从文件中读入数据。
输入的第一行包含两个正整数,表示玩具小人的个数和指令的条数。
第 34 届全国青少年信息学奥林匹克竞赛day2

第34届全国青少年信息学奥林匹克竞赛CCF NOI2017第二试时间:2017年7月21日08:00∼13:00题目名称游戏蔬菜分身术题目类型传统型传统型传统型目录game vegetables phantom可执行文件名game vegetables phantom输入文件名game.in vegetables.in phantom.in输出文件名game.out vegetables.out phantom.out每个测试点时限 1.0秒 3.0秒 3.0秒内存限制512MB512MB512MB测试点数目202520每个测试点分值545提交源程序文件名对于C++语言game.cpp vegetables.cpp phantom.cpp对于C语言game.c vegetables.c phantom.c对于Pascal语言game.pas vegetables.pas phantom.pas 编译选项对于C++语言-lm-O2-lm-O2-lm对于C语言-lm-O2-lm-O2-lm对于Pascal语言-O2-O2游戏(game)【题目背景】狂野飙车是小L最喜欢的游戏。
与其他业余玩家不同的是,小L在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略。
【题目描述】小L计划进行n场游戏,每场游戏使用一张地图,小L会选择一辆车在该地图上完成游戏。
小L的赛车有三辆,分别用大写字母A、B、C表示。
地图一共有四种,分别用小写字母x、a、b、c表示。
其中,赛车A不适合在地图a上使用,赛车B不适合在地图b上使用,赛车C不适合在地图c上使用,而地图x则适合所有赛车参加。
适合所有赛车参加的地图并不多见,最多只会有d张。
n场游戏的地图可以用一个小写字母组成的字符串描述。
例如:S=xaabxcbc表示小L计划进行8场游戏,其中第1场和第5场的地图类型是x,适合所有赛车,第2场和第3场的地图是a,不适合赛车A,第4场和第7场的地图是b,不适合赛车B,第6场和第8场的地图是c,不适合赛车C。
NOIP2017提高组C++试题(无水印,去水印文字版)

D. O(N2)
D. b + c * a * d )。 D. 41
9. 将 7 个名额分给 4 个不同的班级,允许有的班级没有名额,有( 同的分配方案。 A. 60 B. 84 C. 96 D. 120
)种不
10. 若 f[0] = 0, f[1] = 1, f[n + 1] = (f[n] + f[n - 1]) / 2,则随着 i 的增大,f[i]将接近于 ( )。 −1 A. 1/2 B. 2/3 C. √5 D. 1 2 11. 设 A 和 B 是两个长为 n 的有序数组, 现在需要将 A 和 B 合并成一个排好序的 数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做 ( )次比较。 2 A. n B. n log n C. 2n D. 2n-1 12. 在 n(n ≥ 3)枚硬币中有一枚质量不合格的硬币(质量过轻或质量过重), 如果只有一架天平可以用来称重且称重的硬币数没有限制,下面是找出这枚 不合格的硬币的算法。请把 a-c 三行代码补全到算法中。 a. ������ ← ������ ∪ ������ b. ������ ← ������ c. ������ ← |������| 算法 Coin(A, n) 1. ������ ← ⌊������/3⌋ 2. 将 A 中硬币分成 X,Y,Z 三个集合,使得|������| = |������| = ������, |������| = ������ − 2������ 3. if ������(������) ≠ ������(������) //W(X), W(Y)分别为 X 或 Y 的重量 4. then __________ 5. else __________ 6. __________ 7. if n>2 then goto 1 8. if n=2 then 任取 A 中 1 枚硬币与拿走硬币比较,若不等,则它不合格; 若相等,则 A 中剩下的硬币不合格. 9. if n=1 then A 中硬币不合格 正确的填空顺序是( )。 A. b, c, a B. c, b, a
【精选资料】NOIP提高组复赛试题与简解转载

Day1铺地毯【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有n 张地毯,编号从1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
【输入】输入文件名为 carpet.in。
输入共 n+2 行。
第一行,一个整数 n,表示总共有n 张地毯。
接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。
第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。
【输出】输出文件名为 carpet.out。
输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
【输入输出样例 1】【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。
【输入输出样例 2】【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。
【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。
【一句话题意】给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。
【考察知识点】枚举【思路】好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。
置答案ans=-1,按顺序枚举所有矩形,如果点在矩形内则更新ans。
注意题中给出的不是对角坐标,实际上是(a,b)与(a+g,b+k)。
noip2017提高组试题day1day2Word版

全国信息学奥林匹克联赛(2017)复赛提高组 1(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、中函数 ()的返回值类型必须是,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存 4G,上述时限以此配置为准。
4、只提供格式附加样例文件。
5、提交的程序代码文件的放置位置请参照各省的具体要求。
6、特别提醒:评测在当前最新公布的下进行,各语言的编译器版本以其为准。
【问题描述】1.小凯的疑惑()小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
每种金币小凯都有无数个。
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。
【输入格式】输入文件名为。
输入数据仅一行,包含两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯手中金币的面值。
【输出格式】输出文件名为。
输出文件仅一行,一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
【输入输出样例 1】【输入输出样例 1 说明】小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、2、4、5、8、11 的物品,其中最贵的物品价值为 11,比 11 贵的物品都能买到,比如:noip2017提高组试题day1day2Word版12 = 3 * 4 + 7 * 013 = 3 * 2 + 7 * 114 = 3 * 0 + 7 * 215 = 3 * 5 + 7 * 0……【输入输出样例 2】见选手目录下的 2 和 2。
【数据规模与约定】对于 30%的数据:1 ≤ a,b ≤ 50。
对于 60%的数据:1 ≤ a,b ≤ 10,000。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF全国信息学奥林匹克联赛(NOIP2017)复赛提高组 day2(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,内存4G,上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、提交的程序代码文件的放置位置请参照各省的具体要求。
6、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1.奶酪(cheese.cpp/c/pas)【问题描述】现有一块大奶酪,它的高度为h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。
我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为z=0,奶酪的上表面为z=h。
现在,奶酪的下表面有一只小老鼠Jerry,它知道奶酪中所有空洞的球心所在的坐标。
如果两个空洞相切或是相交,则Jerry可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交,Jerry则可以从空洞跑到奶酪上表面。
位于奶酪下表面的Jerry想知道,在不破坏奶酪的情况下,能否利用已有的空洞跑到奶酪的上表面去?空间内两点P1(x1,y1,z1)、P2(x2,y2,z2)的距离公式如下:dist(P1,P2)=√(x1−x2)+(y1−y2)+(z1−z2)【输入格式】输入文件名为cheese.in。
每个输入文件包含多组数据。
输入文件的第一行,包含一个正整数T,代表该输入文件中所含的数据组数。
接下来是T组数据,每组数据的格式如下:第一行包含三个正整数n,h和r,两个数之间以一个空格分开,分别代表奶酪中空洞的数量,奶酪的高度和空洞的半径。
接下来的n行,每行包含三个整数x、y、z,两个数之间以一个空格分开,表示空洞球心坐标为(x,y,z)。
【输出格式】输出文件名为cheese.out。
输出文件包含T行,分别对应T组数据的答案,如果在第i组数据中,Jerry能从下表面跑到上表面,则输出“Yes”,如果不能,则输出“No”(均不包含引号)。
见选手目录下的cheese/cheese1.in和cheese/cheese1.ans。
【输入输出样例1说明】第一组数据,由奶酪的剖面图可见:第一个空洞在(0,0,0)与下表面相切第二个空洞在(0,0,4)与上表面相切两个空洞在(0,0,2)相切输出Yes第二组数据,由奶酪的剖面图可见:两个空洞既不相交也不相切输出No第三组数据,由奶酪的剖面图可见:两个空洞相交且与上下表面相切或相交输出Yes【输入输出样例2】见选手目录下的cheese/cheese2.in和cheese/cheese2.ans。
【数据规模与约定】对于20%的数据,n = 1,1 ≤h , r ≤10,000,坐标的绝对值不超过10,000。
对于40%的数据,1 ≤n ≤8,1 ≤h , r ≤10,000,坐标的绝对值不超过10,000。
对于80%的数据,1 ≤n ≤1,000,1 ≤h , r ≤10,000,坐标的绝对值不超过10,000。
对于100%的数据,1 ≤n ≤1,000,1 ≤h , r ≤1,000,000,000,T ≤20,坐标的绝对值不超过1,000,000,000。
2. 宝藏(treasure.cpp/c/pas)【问题描述】参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了n个深埋在地下的宝藏屋,也给出了这n个宝藏屋之间可供开发的m条道路和它们的长度。
小明决心亲自前往挖掘所有宝藏屋中的宝藏。
但是,每个宝藏屋距离地面都很远,也就是说,从地面打通一条到某个宝藏屋的道路是很困难的,而开发宝藏屋之间的道路则相对容易很多。
小明的决心感动了考古挖掘的赞助商,赞助商决定免费赞助他打通一条从地面到某个宝藏屋的通道,通往哪个宝藏屋则由小明来决定。
在此基础上,小明还需要考虑如何开凿宝藏屋之间的道路。
已经开凿出的道路可以任意通行不消耗代价。
每开凿出一条新道路,小明就会与考古队一起挖掘出由该条道路所能到达的宝藏屋的宝藏。
另外,小明不想开发无用道路,即两个已经被挖掘过的宝藏屋之间的道路无需再开发。
新开发一条道路的代价是:这条道路的长度×从赞助商帮你打通的宝藏屋到这条道路起点的宝藏屋所经过的宝藏屋的数量(包括赞助商帮你打通的宝藏屋和这条道路起点的宝藏屋)。
请你编写程序为小明选定由赞助商打通的宝藏屋和之后开凿的道路,使得工程总代价最小,并输出这个最小值。
【输入格式】输入文件名为 treasure.in。
第一行两个用空格分离的正整数n 和m,代表宝藏屋的个数和道路数。
接下来m 行,每行三个用空格分离的正整数,分别是由一条道路连接的两个宝藏屋的编号(编号为1~n),和这条道路的长度v。
【输出格式】输出文件名为treasure.out。
输出共一行,一个正整数,表示最小的总代价。
【输入输出样例1说明】小明选定让赞助商打通了1号宝藏屋。
小明开发了道路1→2,挖掘了2号宝藏。
开发了道路1→4,挖掘了4号宝藏。
还开发了道路4→3,挖掘了3号宝藏。
工程总代价为:1×1 + 1×1 + 1×2 = 4(1→2) (1→4) (4→3)【样例输入输出2】见选手目录下的treasure/treasure2.in与treasure/treasure2.ans。
【输入输出样例2说明】小明选定让赞助商打通了1号宝藏屋。
小明开发了道路1→2,挖掘了2号宝藏。
开发了道路1→3,挖掘了3号宝藏。
还开发了道路1→4,挖掘了4号宝藏。
工程总代价为:1×1 + 3×1 + 1×1 = 5(1→2) (1→3) (1→4)【输入输出样例3】见选手目录下的treasure/treasure3.in和treasure/treasure3.out。
【数据规模与约定】对于20%的数据:保证输入是一棵树,1≤n≤8,v≤5000且所有的v都相等。
对于40%的数据:1≤n≤8,0≤m≤1000,v≤5000且所有的v都相等。
对于70%的数据:1≤n≤8,0≤m≤1000,v≤5000对于100%的数据:1≤n≤12,0≤m≤1000,v≤5000003.列队(phalanx.cpp/c/pas)【问题描述】Sylvia是一个热爱学习的女孩子。
前段时间,Sylvia参加了学校的军训。
众所周知,军训的时候需要站方阵。
Sylvia 所在的方阵中有n×m名学生,方阵的行数为n,列数为m。
为了便于管理,教官在训练开始时,按照从前到后,从左到右的顺序给方阵中的学生从1到n×m 编上了号码(参见后面的样例)。
即:初始时,第i行第j列的学生的编号是(i−1)×m+j。
然而在练习方阵的时候,经常会有学生因为各种各样的事情需要离队。
在一天中,一共发生了q件这样的离队事件。
每一次离队事件可以用数对(x,y)(1≤x≤n, 1≤y≤m)描述,表示第x行第y列的学生离队。
在有学生离队后,队伍中出现了一个空位。
为了队伍的整齐,教官会依次下达这样的两条指令:1.向左看齐。
这时第一列保持不动,所有学生向左填补空缺。
不难发现在这条指令之后,空位在第x行第m列。
2.向前看齐。
这时第一行保持不动,所有学生向前填补空缺。
不难发现在这条指令之后,空位在第n行第m列。
教官规定不能有两个或更多学生同时离队。
即在前一个离队的学生归队之后,下一个学生才能离队。
因此在每一个离队的学生要归队时,队伍中有且仅有第n行第m 列一个空位,这时这个学生会自然地填补到这个位置。
因为站方阵真的很无聊,所以Sylvia想要计算每一次离队事件中,离队的同学的编号是多少。
注意:每一个同学的编号不会随着离队事件的发生而改变,在发生离队事件后方阵中同学的编号可能是乱序的。
【输入格式】输入文件名为phalanx.in。
输入共q+1行。
第1行包含3个用空格分隔的正整数n, m, q,表示方阵大小是 n 行m列,一共发生了q次事件。
接下来q行按照事件发生顺序描述了q件事件。
每一行是两个整数x, y,用一个空格分隔,表示这个离队事件中离队的学生当时排在第x行第y列。
【输出格式】输出文件名为phalanx.out。
按照事件输入的顺序,每一个事件输出一行一个整数,表示这个离队事件中离队学生的编号。
见选手目录下的phalanx/phalanx1.in与phalanx/phalanx1.ans。
【输入输出样例1说明】列队的过程如上图所示,每一行描述了一个事件。
在第一个事件中,编号为1的同学离队,这时空位在第一行第一列。
接着所有同学向左标齐,这时编号为2的同学向左移动一步,空位移动到第一行第二列。
然后所有同学向上标齐,这时编号为4的同学向上一步,这时空位移动到第二行第二列。
最后编号为1的同学返回填补到空位中。
【样例输入输出2】见选手目录下的phalanx/phalanx2.in与phalanx/phalanx2.ans。
【数据规模与约定】数据保证每一个事件满足1≤x≤n,1≤y≤m。