noip2011年提高组试题day1
NOIP 2011 提高组day1 题解 美少女战士原创
NOIP 2011 提高组day1 题解美少女战士原创1.铺地毯(carpet.cpp/c/pas)【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有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】carpet.in carpet.out3 31 02 30 2 3 32 13 32 2【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。
【输入输出样例 2】carpet.in carpet.out3 -11 02 30 2 3 32 13 34 5【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。
(不好意思,因为是从PDF中复制过来的,所以没有图,不过挺简单的,大家可以自己做一下)(嘿嘿,还是我的朋友智慧,我怎么就没想到用QQ截图)【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。
模拟NOIP2011试题
模拟试题第一题:模拟开关题目描述:有N盏电灯排成一行,依次编号为1,2,3,…,N,各有一个开关,开始灯都亮着的。
现在还有N个人,第1人走过来依次把1和1的倍数电灯的开关都拉一下。
第2个人走过来依次把2和2的倍数的开关都拉一下,第3个人走过来依次把3和3的倍数的开关都拉一下,……问最后都有哪些灯是关着的?[输入文件] 文件名:moni.in文件中只有一行,包含1个整数N(其中5≤N≤10000)[输出文件] 文件名:moni.out文件共一行,分别为那些关着的灯泡的编号,如果没有灯泡关着,就输出0。
[样例输入]:moni.in的内容为:10[样例输出]:moni.out的内容为:1 4 9第二题:矩阵中心题目描述:一个整型矩阵的中心(x,y)是这样确定的:使第x行上边元素的总和与第x行下边元素的总和之差的绝对值最小,而且第y列左边元素的总和与第y列右边元素的总和之差的绝对值最小。
现在有一个整型矩阵,请你找出它的中心(x,y)。
如果只有一个中心,则输出中心位置;如果存在多个中心,则输出中心的个数。
输入格式:m+1行。
第一行有两个整数m、n,分别表示矩阵的行和列。
以下m行,每行有n个不超过200的正整数。
其中:2<m、n<=100。
输出格式:一行。
如果这有一个中心,则输出(x,y);否则输出一个整数,表示中心的个数。
输入样例一:5 52 3 2 3 22 3 4 2 23 4 2 2 45 2 2 2 33 34 4 2输出样例一:(2,2)输入样例二:3 42 2 2 22 4 4 22 2 2 2输出样例二:题目描述:周末Ztc想去剧场看演出,但他没有票。
这时,救世主wzj出现了,他慷慨的愿意卖给ztc一些票。
Wzj手上共有n张票,但每张票的费用都不一样,贪心的ztc想要得到尽可能多的票,但又想花费最少,慷慨的wzj愿意给连续的m张票。
Ztc希望你能帮助他在花钱范围内取得最大的票数。
全国信息学联赛(NOIP)模拟试题-一试
全国信息学奥林匹克联赛(NOIP2011)复赛提高组模拟模拟试题试题试题(一试)(一试)(请选手务必仔细阅读本页内容)一.题目概况中文题目名称订正作业怪兽对对碰采油区域英文题目与子目录名correct monster oil 可执行文件名correct monster oil 输入文件correct.in monster.in oil.in 输出文件correct.out monster.out oil.out 每个测试点时限1秒1秒 1.5秒测试点数目101010每个测试点分值101010附加样例文件有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统二.提交源程序文件名三.运行内存限制对于pascal 语言correct.pas ball.pas .pas 对于C 语言correct.c ball.c .c 对于C++语言correct.cppball.cpp.cpp内存上限128M128M128M1.订正作业(correctcorrect.pas/c/cpp).pas/c/cpp)【问题描述】丁丁是个富有爱心的哥哥。
他上小学的弟弟小丁丁刚刚学习了四则运算,并做了作业。
现在小丁丁把自己的作业给了丁丁,请他帮忙检查订正一下作业。
作业题都是一些含有括号的四则运算等式。
丁丁发现他的弟弟对于括号的使用不太明白,在作业中写了不少多余的括号。
现在丁丁的任务是找出这些多余的括号,并把他们擦去。
但是为了尽可能避免自己的笔迹出现,只能改动括号。
要求保持原表达式中变量和运。
另外,由于弟弟在上小学,不必考虑“+”“-”作为正负号的情况。
即输入的表达式中”“-”用于“+X”(正数)或是“-X”(负数)的情况。
也不必考虑式子中有超过20输入文件名为correct.in。
第一行为一个正整数n,表示作业题的数量。
接下来的n行,每行有n个含括号的等式,表示待丁丁订正的作业题。
【输出】输出文件名为correct.out。
【NOIP2011提高组】铺地毯
【NOIP2011提高组】铺地毯题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有n 张地毯,编号从1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
输入格式输入共 n+2 行第一行,一个整数 nn ,表示总共有 nn 张地毯接下来的 nn 行中,第 i+1 行表示编号 iii 的地毯的信息,包含四个正整数 a,b,g,ka ,b ,g ,k每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b)(a,b) 以及地毯在 xx 轴和 y y轴方向的长度第 n+2 行包含两个正整数 xx 和 yy,表示所求的地面的点的坐标(x,y)(x,y)。
输出格式输出共 11 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖输出-1。
数据范围对于30% 的数据,有n≤2;对于50% 的数据,0≤a,b,g,k≤100;对于100%的数据,有0≤n≤10,000,0≤a,b,g,k≤100,0000≤a, b, g, k ≤100,000。
看完这道题大概会觉得很简单之后定义一个数组来模拟每个方块上面覆盖着的是几号地毯,最后输出book[x][y]就好了。
如果你是这么想的话,那么恭喜你上当了。
a,b,g,k的范围最大都是100,000,也就是说,地毯最大可以覆盖到横纵坐标为200,000的地方。
于是你把数组开成这样,于是后果自负。
不过当然了如果你只是想要50分的话,205*205的数组是可以的。
如果想要拿到满分很明显出题人不想让你定义数组来记录,我们就得再想一个办法了。
其实仔细想想根本就不用定义标记啊,对于每个地毯我们只需要判断它时候覆盖住所求点就好了啊,如果覆盖,那就迭代。
2011NOIP初赛C++提高组试题
第十七届全国青少年信息学奥林匹克联赛初赛试题(提高组 C++语言两小时完成)一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确选项)1、在二进制下,1010110+()=1100011。
A.1011B.1101C.1010D.11112、字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的()A.66B.5AC.50D.视具体的计算机而定3、右图是一颗二叉树,它的先序遍历是()A.ABDEFCB.DBEFACC.DFEBCAD.ABCDEF4、寄存器是()的重要组成部分。
A.硬盘B.高速缓存C.内存D.中央处理器(CPU)5、广度优先搜索时,需要用到的数据结构是()A.链表B.队列C.栈D.散列表6、在使用高级语言编写程序时,一般提到的空间复杂度中的“空间”是指()A.程序运行时理论上所占的内存空间B.程序运行时理论上所占的数组空间C.程序运行时理论上所占的硬盘空间D.程序源文件理论上所占的硬盘空间7、应用快速排序的分治思想,可以实现一个求第大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度是(B)A.O(n2)B.O(nlogn)C.O(n)D.O(1)8、为解决Web应用中的不兼容问题,保障信息的顺利流通,(D)制定了一系列标准,设计等,并建议开发者遵循。
A.微软B.美国计算机协会(ACM)C.联合国教科文组织D.万维网联盟(W3C)9、体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排位走向派头,找到第一个比自己高的同学,并站在他的后面。
这种站队的方法类似于(B)算法。
A.快速排序B.插入排序C.冒泡排序D.归并排序10、1956年()授予肖克利、巴丁和布拉顿,以表彰他们对半导体的研究和晶体管效应的发现。
A.诺贝尔物理学奖B.约翰冯诺依曼奖C.图灵奖D.高德纳奖二、不定项选择题(共10题,每题1.5分,共计15分。
2011十七届noip提高组题目及答案
第十七届全国青少年信息学奥林匹克联赛初赛试题(提高组 Pascal语言两小时完成)一、单项选择题(共20题,每题1.5分。
共计30分。
每题有且仅有一个正确选项。
)1.在二进制下, +()= 。
A.1011 B.1101 C.1010 D.11112.字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的()。
A.66 B.5A C.50 D.视具体的计算机而定3.右图是一棵二叉树,它的先序遍历是()。
A.ABDEFC B.DBEFAC C.DFEBCA D.ABCDEF4.寄存器是()的重要组成部分。
A.硬盘B.高速缓存C.内存D.中央处理器(CPU)5.广度优先搜索时,需要用到的数据结构是()。
A.链表B.队列C.栈D.散列表6.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指()。
A.程序运行时理论上所占的内存空间B.程序运行时理论上所占的数组空间C.程序运行时理论上所占的硬盘空间D.程序源文件理论上所占的硬盘空间7.应用快速排序的分治思想,可以实现一个求第K大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为()。
A.O(n2)B.O(n log n)C.O(n) D.O(1)8.为解决Web应用中的不兼容问题,保障信息的顺利流通,()制定了一系列标准,涉及HTML、XML、CSS等,并建议开发者遵循。
A.微软 B.美国计算机协会(ACM) C.联台国教科文组织D.万维网联盟(W3C)9.体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。
这种站队的方法类似于()算法。
A.快速排序B.插入排序C.冒泡排序D.归并排序10.1956年()授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发现。
冲刺NOIP2011模拟试题一
冲刺NOIP2011模拟试题1.单词分类(word.c/cpp)[问题描述]Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。
两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。
现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。
你要告诉Oliver 这些单词会被分成几类。
[输入格式]输入文件的第一行为单词个数N,以下N行每行为一个单词。
[输出格式]输出文件仅包含一个数,表示这N个单词分成的类数。
[样例输入]3AABACCBAAAAAABB[样例输出]2[数据范围]对于70%的数据满足N≤100。
对于100%的数据满足N≤10000。
2.过河问题(river.c/cpp)[问题描述]有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸。
而东岸边有一条小船。
船太小了,一次只能乘坐两人。
每个人都有一个渡河时间T,船划到对岸的时间等于船上渡河时间较长的人所用时间。
现在已知N个人的渡河时间T,Oliver想要你告诉他,他们最少要花费多少时间,才能使所有人都过河。
注意,只有船在东岸(西岸)的人才能坐上船划到对岸。
[输入格式]输入文件第一行为人数N,以下有N行,每行一个数。
第i+1行的数为第i个人的渡河时间。
[输出格式]输出文件仅包含一个数,表示所有人都渡过河的最少渡河时间。
[样例输入]4671015[样例输出]42[样例解释]初始:东岸{1,2,3,4},西岸{}第一次:东岸{3,4},西岸{1,2} 时间7第二次:东岸{1,3,4},西岸{2} 时间6第三次:东岸{1},西岸{2,3,4},时间15第四次:东岸{1,2},西岸{3,4} 时间7第五次:东岸{},西岸{1,2,3,4} 时间7所以总时间为7+6+15+7+7=42,没有比这个更优的方案。
NOIP2011模拟题1
NOIP2011模拟赛2011年7月题目名称Rabbit Number Play with Power Step Color the Axis 提交文件rabbit.*play.*step.*axis.*输入文件rabbit.in play.in step.in axis.in输出文件rabbit.out play.out step.out axis.out时间限制1秒1秒1秒1秒内存限制256MB256MB256MB256MB 注:请提交源程序,测试时以源代码为准。
1Rabbit Number1.1题目描述设S(N)表示N的各位数字之和,如S(484)=4+8+4=16,S(22)=2+2=4。
如果一个正整数满足S(x∗x)=S(x)∗S(x),我们称之为Rabbit Number。
比方说,22就是一个Rabbit Number,因为S(484)=S(22)∗S(22)。
现在,给出一个区间[L,R],求在该区间内的Rabbit Number的个数。
1.2输入格式输入仅一行,为空格隔开的两个数L和R。
1.3输出格式输出仅一行一个整数,表示所求Rabbit Number的个数。
1.4数据限制1≤L≤R≤1091.5样例数据rabbit.in rabbit.out2222148448401581258484241000000000100000000012Play with Power2.1题目描述Masha和Stas正在玩一个游戏。
在游戏的开始,给出一个定值N,同时有两个正整数A和B,初始时满足A B≤N。
Masha先手。
每一回合,玩家要将A和B的其中一个数加上1,但不能令到A B>N,否则该玩家输。
现在,Masha想知道假如两人都使用最优策略,对于一个特定的N,不同的A、B的初始值谁将获胜呢?2.2输入格式输入第一行为一个正整数N。
输入第二行为一个正整数T,表示测试数据个数。
下面T行,每行有两个正整数A i、B i,描述了一组测试数据<A i,B i,N>,含义如题目描述。
2011noip提高组复赛题解
Noip 2011 提高组(Day 1)解题报告及程序一、铺地毯正着扫一遍判断每个矩形是否覆盖询问的点,覆盖则更新结果或者倒着扫一遍,找到第一个覆盖询问点的矩形,输出即可,时间复杂度O(n)Procedure:#include <cstdio>#define MaxLength 10000inline int Getint(){char c = getchar();while (c<'0' || c>'9') c = getchar();int ret = 0;while (c>='0' && c<='9'){ret = ret*10 + (c-'0');c = getchar();}return ret;}int sx[MaxLength+5], sy[MaxLength+5], ex[MaxLength+5], ey[MaxLength+5], n; void Init(){n = Getint();for (int i=1; i<=n; i++){sx[i] = Getint(), sy[i] = Getint(), ex[i] = Getint(), ey[i] = Getint();ex[i] += sx[i], ey[i] += sy[i];}return ;}int x0, y0, ans = -1;void Solve(){x0 = Getint(), y0 = Getint();for (int i=n; i;i--)if(x0>=sx[i] && x0<=ex[i] && y0>=sy[i] && y0<=ey[i]){ans = i;break;}printf("%d", ans);return ;}int main(){Init();Solve();getchar(); getchar();return 0;}二、选择客栈f [i][j]表示前i个客栈以第j种颜色的方案数,先以客栈划分第一阶段,以颜色划分第二阶段,如果颜色相同的客栈,则以前一客栈相同颜色的方案数+1,否则同其一样;计算答案时记一下前一个比最高消费限制低的客栈编号pos[i],路径压缩,时间复杂度O(nm)Procedure:#include <cstdio>#define MaxNode 200000#define MaxType 50inline int Getint(){char c = getchar();while (c<'0' || c>'9') c = getchar();int ret = 0;while (c>='0' && c<='9'){ret = ret*10 + (c-'0');c = getchar();}return ret;}int color[MaxNode+5], price[MaxNode+5], n, m, low;void Init(){n = Getint(), m = Getint(), low = Getint();for (int i=1; i<=n; i++) color[i] = Getint(), price[i] = Getint();return ;}int f[MaxNode+5][MaxType+5], pos[MaxNode+5], ans = 0;void Dp(){for (int i=1; i<=n; i++)for (int j=0; j<m; j++)if (color[i]==j) f[i][j] = f[i-1][j]+1;else f[i][j] = f[i-1][j];for (int i=1; i<=n; i++)if (price[i]<=low){pos[i] = i;ans += f[i-1][color[i]];}else{pos[i] = pos[i-1];ans += f[pos[i]][color[i]];}printf("%d", ans);return ;}int main(){Init();Dp();getchar(); getchar();return 0;}三、Mayan纯暴力DFS,加可行性剪枝,如同一种颜色小于3块无法消除,同一颜色交换无意义,下落无法完成左右移动,再加模拟其过程时间复杂度O( n^(?) )Procedure:#include <cstdio>#include <memory>inline int Getint(){char c = getchar();while (c<'0' || c>'9') c = getchar();int ret = 0;while (c>='0' && c<='9'){ret = ret*10 + (c-'0');c = getchar();}return ret;}inline void Swap(int &a, int &b){int temp = a; a = b; b = temp;return ;}int map[10][10], point[10], color[15], n, type = 0;void Init(){n = Getint();for (int i=0; i<5; i++){map[i][0] = Getint();if (type<map[i][point[i]]) type = map[i][point[i]];color[ map[i][point[i]] ]++;while (map[i][point[i]]){map[i][++point[i]] = Getint();if (type<map[i][point[i]]) type = map[i][point[i]];color[ map[i][point[i]] ]++;}point[i]--;}return ;}bool Fall(int k){int top = -1;for (int i=0; i<=point[k]; i++)if (map[k][i]) map[k][++top] = map[k][i];if (top!=point[k]){for (int i=top+1; i<=point[k]; i++) map[k][i] = 0;point[k] = top;return true;}return false;}bool Check_Fall(){bool flag = false;for (int i=0; i<5; i++)if (Fall(i)) flag = true;return flag;}bool sign[10][10];void Clear(){int pmax = 0;for (int i=0; i<5; i++)if (point[i]>pmax) pmax = point[i];for (int i=0; i<5; i++)if (point[i]>=2){int k = point[i], j = k-1;for (; j>=0; j--)if (map[i][j]!=map[i][k]){if (k-j>=3)for (; k>j; k--) sign[i][k] = true;else k = j;}if (k-j>=3)for (; k>j; k--) sign[i][k] = true;}for (int i=0; i<=pmax; i++){int k = 0, j = 1;for (; j<5; j++)if (map[j][i]!=map[k][i]){if (j-k>=3)for (; k<j; k++) sign[k][i] = true;else k = j;}if (j-k>=3)for (; k<j; k++) sign[k][i] = true;}for (int i=0; i<5; i++)for (int j=pmax; j>=0; j--)if (sign[i][j]){sign[i][j] = false;color[map[i][j]]--;map[i][j] = 0;}return ;}void Solve(int x, int y){Fall(x), Fall(y);Clear();while (Check_Fall()) Clear();return ;}bool Check_Point(){for (int i=0; i<5; i++)if (point[i]>=0)return false;return true;}bool Check_Color(){for (int i=1; i<=type; i++)if (color[i]==1 || color[i]==2) return false;return true;}struct Ac{int m[10][10], p[10], c[15];}a[10];inline void Copy(int k){memcpy(a[k].m, map, sizeof(map));memcpy(a[k].p, point, sizeof(point));memcpy(a[k].c, color, sizeof(color));return ;}inline void Turn_Copy(int k){memcpy(map, a[k].m, sizeof(a[k].m));memcpy(point, a[k].p, sizeof(a[k].p));memcpy(color, a[k].c, sizeof(a[k].c));return ;}int ans[10][10];bool Dfs(int deep){if (!Check_Color()) return false;Copy(deep);for (int i=0; i<5; i++)for (int j=0; j<=point[i]; j++){ans[deep][0] = i, ans[deep][1] = j;if (i<4){ans[deep][2] = 1;Swap(map[i][j], map[i+1][j]);if (point[i+1]<j) point[i+1] = j;Solve(i, i+1);if (deep==n && Check_Point()) return true;if (deep<n && Dfs(deep+1)) return true;Turn_Copy(deep);}if (i && point[i-1]<j){ans[deep][2] = -1;Swap(map[i][j], map[i-1][j]);point[i-1] = j;Solve(i, i-1);if (deep==n && Check_Point()) return true;if (deep<n && Dfs(deep+1)) return true;Turn_Copy(deep);}}return false;}int main(){Init();if (!Dfs(1)) printf("-1");elsefor (int i=1; i<=n; i++)printf("%d %d %d\n", ans[i][0], ans[i][1], ans[i][2]);getchar(); getchar();return 0;}Noip 2011 提高组(Day 2)解题报告及程序一、计算系数二项式定理,杨辉三角,注意Mod就可以了,时间复杂度O(k^2)Procedure:#include <cstdio>#define MaxNode 1000#define Mod 10007int f[MaxNode+5][MaxNode+5], a, b, k, n, m;void Init(){scanf("%d %d %d %d %d", &a, &b, &k, &n, &m);a %= Mod,b %= Mod, k++;for (int i=1; i<=k; i++) f[i][1] = f[i][i] = 1;for (int i=2; i<=k; i++)for (int j=2; j<i; j++)f[i][j] = (f[i-1][j-1] + f[i-1][j])%Mod;return ;}void Solve(){int x = k, y = k-n;for (int i=1; i<=n; i++) f[x][y] = (f[x][y] * a)%Mod;for (int j=1; j<=m; j++) f[x][y] = (f[x][y] * b)%Mod;printf("%d", f[x][y]%Mod);return ;}int main(){Init();Solve();getchar(); getchar();return 0;}二、聪明的质检员由观察得随着参数W的上升检验值temp会减小,据函数Abs(标准值-temp)有最小值,故可二分查找得出答案其中每次调整参数W时扫描一次矿石中大于W的,num[]表示其数量前缀和,val[]表示其价值前缀和,故可在一个区间的检验值计算中以O(1)的时间得出答案时间复杂度O(log(w)*(n+m))Procedure:#include <cstdio>#define MaxNode 200000#define INF ((0x7fffffffffffffffll)>>1)inline int Getint(){char c = getchar();while (c<'0' || c>'9') c = getchar();int ret = 0;while (c>='0' && c<='9'){ret = ret*10 + (c-'0');c = getchar();}return ret;}long long Abs(long long a){if (a>0) return a;return -a;}int w[MaxNode+5], val[MaxNode+5], l[MaxNode+5], r[MaxNode+5], n, m, lw, rw; long long standard;void Init(){n = Getint(), m = Getint(), scanf("%I64d", &standard);for (int i=1; i<=n; i++){w[i] = Getint(), val[i] = Getint();if (rw<w[i]) rw = w[i]+1;}for (int i=1; i<=m; i++) l[i] = Getint(), r[i] = Getint();return ;}int num[MaxNode+5];long long sum[MaxNode+5];long long Calc(int left, int right){return (sum[right]-sum[left]) * (num[right]-num[left]);}long long Sieve(int Limit){long long ret = 0;sum[0] = num[0] = 0;for (int i=1; i<=n; i++){num[i] = num[i-1];sum[i] = sum[i-1];if (w[i]>=Limit){num[i]++;sum[i] += val[i];}}for (int i=1; i<=m; i++) ret += Calc(l[i]-1, r[i]);return ret;}long long ans = INF;void Binary_Search()while (lw<rw){int mid = (lw+rw)>>1;long long temp = Sieve(mid);long long value = Abs(standard - temp);if (temp<standard) rw = mid;else lw = mid+1;if (ans>value) ans = value;}printf("%I64d", ans);return ;}int main(){Init();Binary_Search();getchar(); getchar();return 0;}三、观光公交贪心令t[i]表示当前到达第i个站的时间,sumoff[i]表示目的地为i的乘客数,arrtime[i]表示第i个乘客到站等车的时刻题目给定加速器的作用就是可以把某个t[i]减去1并把与其相关联的t[i]全部减小1。
2011NOIP初赛Pascal提高组试题
第十七届全国青少年信息学奥林匹克联赛初赛试题( 提高组 Pascal 语言 两小时完成 )●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确选项。
)1.在二进制下,1101001 + ( ) = 1110110。
A. 1011B. 1101C. 1010D. 11112. 字符“A ”的ASCII 码为十六进制41,则字符“Z ”的ASCII 码为十六进制的( )。
A. 66B. 5AC. 50D. 视具体的计算机而定3.右图是一棵二叉树,它的先序遍历是( )。
A. ABDEFCB. DBEFACC. DFEBCAD. ABCDEF4.寄存器是( )的重要组成部分。
A. 硬盘B. 高速缓存C. 内存D. 中央处理器(CPU )5.广度优先搜索时,需要用到的数据结构是( )。
A. 链表B. 队列C. 栈D. 散列表6.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指( )。
A. 程序运行时理论上所占的内存空间B. 程序运行时理论上所占的数组空间C. 程序运行时理论上所占的硬盘空间D. 程序源文件理论上所占的硬盘空间7.应用快速排序的分治思想,可以实现一个求第K 大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为( )。
A. O(n 2)B. O(n log n)C. O(n)D. O(1)8.为解决Web 应用中的不兼容问题,保障信息的顺利流通,( )制定了一系列标准,涉及HTML 、XML 、CSS 等,并建议开发者遵循。
A. 微软B. 美国计算机协会(ACM )C. 联合国教科文组织D. 万维网联盟(W3C ) A B CD E F9. 体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。
NOIP2011-C提高组试题
9.对右图使用 Dijkstra 算法计算 S 点到其余各点的最短路径 长度时,到 B 点的距离 d[B]初始时赋为 8,在算法的执行过程 中还会出现的值有( A. 3 )。 C. 6 D. 5 B. 7
10. 为计算机网络中进行数据交换而建立的规则、标准或约定的集合成为网络协议。下列 英文缩写中,( A. HTTP )是网络协议。 B. TCP/IP C. FTP D. WWW
CCF NOIP2011 初赛 提高组 C 8
ans.len = a.len + b.len - 1; return ans; } hugeint add(hugeint a, hugeint b) { int i; hugeint ans; memset(ans.num, 0, sizeof(ans.num)); if (a.len > b.len) ans.len = a.len; else ans.len = b.len; for (i = 1; i <= ans.len; i++) { ans.num[i] += ans.num[i] %= 10; } if (ans.num[ans.len + 1] > 0) ans.len++; return ans; } hugeint average(hugeint a, hugeint b) { int i; hugeint ans; ans = add(a, b); for (i = ans.len; i >= 2; i--) { ans.num[i - 1] += ( ans.num[i] /= 2; } ans.num[1] /= 2; if (ans.num[ans.len] == 0) ans.len--; return ans; ④ ) * 10; ③ ; ans.num[i + 1] += ans.num[i] / 10;
NOIP2011复赛模拟卷(一)
NOIP 2011复赛练习卷(一)1、最优贸易(trade.pas/c/cpp)【问题描述】C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。
任意两个城市之间最多只有一条道路直接相连。
这m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 条。
C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。
但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。
商人阿龙来到 C 国旅游。
当他得知同一种商品在不同城市的价格可能会不同这一信息之后,便决定在旅游的同时,利用商品在不同城市中的差价赚回一点旅费。
设C国n个城市的标号从1~ n,阿龙决定从1号城市出发,并最终在n号城市结束自己的旅行。
在旅游的过程中,任何城市可以重复经过多次,但不要求经过所有n个城市。
阿龙通过这样的贸易方式赚取旅费:他会选择一个经过的城市买入他最喜欢的商品——水晶球,并在之后经过的另一个城市卖出这个水晶球,用赚取的差价当做旅费。
由于阿龙主要是来 C 国旅游,他决定这个贸易只进行最多一次,当然,在赚不到差价的情况下他就无需进行贸易。
假设C国有5个大城市,城市的编号和道路连接情况如下图,单向箭头表示这条道路为单向通行,双向箭头表示这条道路为双向通行。
假设 1~n 号城市的水晶球价格分别为 4,3,5,6,1。
阿龙可以选择如下一条线路:1->2->3->5,并在 2 号城市以 3 的价格买入水晶球,在 3号城市以 5 的价格卖出水晶球,赚取的旅费数为 2。
阿龙也可以选择如下一条线路 1->4->5->4->5,并在第 1 次到达 5 号城市时以1 的价格买入水晶球,在第2 次到达 4 号城市时,以 6 的价格卖出水晶球,赚取的旅费数为 5。
现在给出 n 个城市的水晶球价格、m 条道路的信息(每条道路所连接的两个城市的编号以及该条道路的通行情况)),请你告诉阿龙,他最多能赚取多少旅费。
(word完整版)NOIP提高组初赛历年试题及答案阅读题篇,.docx
NOIP 提高组初赛历年试题及答案阅读题篇程序写果(共 4 ,每 8 分,共 32 分)程序的最好方法并非是依次从到尾。
程序不像迷,我无法从末尾几找到答案,也不像一本引人入的籍,只需直接翻到褶最多的那几,我就能找到最精彩的片断。
因此我在程序,最好逐一考察研究每一段代,搞清楚每一段代的来去脉,理解每一段代在程序中所起的作用,而形成一个虚的程序构,并以此基来行。
1、分:高入手,逐深入,正确理解程序。
2、写注解:固化、、提已有的理解成果。
3、先模:根据代序跟踪量,模运算。
4、找律:先模几次循后,找出背后的律。
5、看功能:从代构和运算果判断程序功能。
6、猜算法:有不知道算法,通构和函数猜一猜。
7、方法:了解程序本后,一个熟悉的方法。
大多数人来,写程序是令人开心的一件事情,人的程序却很痛苦,很恐惧,宁愿自己重写一遍。
其到好的程序,就像一篇美文,令人心神怡,豁然开朗,因背后是一个人的思,甚至整个人生。
人的程序不可以巩固自己的知,启自己的思,提升自己的修养,你收,其,也是在学、在、在工作中的最重要、最常用的基本功。
如果写程序是把自己的思化代,程序就是把代化你理解的人的思。
当你程序有烈的代入感,像演一,真正入到的精神世界,面部表情也随之日丰富起来。
祝你!你通关了!之,看得多,得多,拼得多,你就考得多⋯⋯NOIP2011-1 .#include <iostream>#include <cstring>using namespace std;const int SIZE = 100;int main(){int n,i,sum,x,a[SIZE];cin>>n;memset(a,0,sizeof(a));for(i=1;i<=n;i++){cin>>x;a[x]++;}i=0;sum=0;while(sum<(n/2+1)){i++;sum+=a[i];}cout<<i<<endl;return 0;}输入:114 5 6 6 4 3 3 2 3 2 1一步步模拟,注意输出的是sum超出循环条件时的i 值(中位数),而不是sum ,也不是a[x]输出: 3NOIP2011-2 .#include <iostream> using namespace std; int n;void f2(int x,int y); void f1(int x,int y){if(x<n)f2(y,x+y);}void f2(int x,int y){cout<<x<<' ';f1(y,x+y);}int main(){cin>>n;f1(0,1);return 0;}输入: 30此为简单的递归题,依次输出f2(x,y)中的x值,注意边界条件时f1(x,y)的x>=30咦!这不是隔一个输出一个的Fibonacci吗?输出: 1 2 5 13 34NOIP2011-3 .#include <iostream>using namespace std; const int V=100;int n,m,ans,e[V][V];bool visited[V];void dfs(int x,intlen){int i;visited[x]= true;if(len>ans)ans=len;for(i=1;i<=n;i++)if( (!visited[i]) &&(e[x][i]!=-1) ) dfs(i,len+e[x][i]);visited[x]=false;}int main(){int i,j,a,b,c;cin>>n>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++)e[i][j]=-1;for(i=1;i<=m;i++){cin>>a>>b>>c;e[a][b]=c;e[b][a]=c;}for(i=1;i<=n;i++)visited[i]=false;ans=0;for(i=1;i<=n;i++)dfs(i,0);cout<<ans<<endl;return 0;}输入:4 61 2 102 3 203 4 304 1 401 3 502 4 60一看就知这是深搜算法(DFS ),输入是个四个顶点的无向图(邻接矩阵如下):如len>ans,则 ans=len,可以说明这是个在图中用DFS找最长的路径的程序。
第十七届NOIP2011 提高组初赛试题及答案解析
第十七届全国青少年信息学奥林匹克联赛初赛试题(提组 Pascal 语言两小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共10题,每题1.5分,共15分,每题有且仅有一个正确选项。
)1. 在二进制下,1011010+()=1100111。
A.1011B.1101C.1010D.1111解析:简单的二进制运算,炮灰都会。
直接用减法:1100111-1011010=00001101;也可用补码计算:1100111-1011010=(1100111)补+(-1011010)补=(01100111)+(11011010)补=(01100111)+(10100101+00000001)=(01100111)+10100110)=100001101=1101(超过8位者溢出)。
答案:B2. 字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的()。
A.66 B.5A C.50 D.视具体的计算机而定解析:每年必考进制转换题。
若记得ASCII码的可以直接算出Z的码然后转回16进制,A的ASCII码是65,则Z的ASCII码为65+25=90,(90)10=(5A)16。
若不记得的就把十六进制的41转回十进制,4*16+1=65,然后+25得90,再转成16进制得5A。
答案:BA.ABDEFC B.DBEFAC C.DFEBCA D.ABCDEF解析:每年必考树的遍历题。
先序遍历就是先根遍历,就是先根,再左右子树的遍历。
然后就ABDEFC出来了。
答案:A4. 寄存器是()的重要组成部分。
A. 硬盘B. 高速缓存C. 内存D. 中央处理器(CPU)解析:每年必考硬件知识题。
计算机中能存储数据的部件有:寄存器,一级缓存,二级缓存,只读存储器ROM,随机存储器RAM和外存。
其中寄存器和一级缓存在CPU内,一级缓存又名片上的缓存。
二级缓存,只读存储器ROM和随机存储器RAM都在主板上,二级缓存又名板上的缓存,只读存储器ROM和随机存储器RAM共同构成内存。
NOIP2011题解
3 / 16
复杂度:O(n^2m) 期望分数 30 分 算法 3:
对于算法 1,我们需要依次枚举每一个区间,后枚举每一个区间内的所有矿石,由 于区间可能重复的非常多,所以我们做了很多“无用功”。对于当前参数 w,我们 可以预处理出一个前缀和 cnt[i]表示前 i 个矿石 w[i]>=w 的个数,sum[i]表示前 i 个矿石 w[i]>=w 的价值和,则递推式为: 边界条件:cnt[0]=0 sum[0]=0 若 w[i]>=w 则
2. Hotel 选择客栈 按照题目要求的进行模拟,每次选择两个进行判断,若满足以下条件: (1)两个客栈颜色相同 (2)两个客栈中间(包含两个客栈)中存在一家咖啡店最低消费小于等于 p 的 即算作一个满足条件的解,题目要求求出解的个数。 算法 1: 枚举两个客栈,判断颜色是否相同,并顺序枚举求两个客栈的最小值,看是否小于 等于 p。 复杂度 O(N^3) 期望得分 30-40 分 算法 2: 对于求两个客栈的最小值问题,为经典的 RMQ 问题,可以用线段树维护一段区间的 最小值。 复杂度 O(NlogN+N^2logN) 期望得分 50 分 算法 3: 对于思路 2,可以用 ST 算法 O(1)时间求出两个区间的最小值。 复杂度 O(NlogN+N^2) 期望得分 50-60 分 具体请参考程序 2 算法 4: 我们发现这个 RMQ 问题有很强的特殊性,由于我们要枚举所有的区间,按照双重循
noip2011初赛试题及答案(完美Word版)-推荐下载
第十七届全国青少年信息学奥林匹克联赛初赛试题(提高组Pascal语言两小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分。
共计30分。
每题有且仅有一个正确选项。
)B 1.在二进制下,1100011 +()= 1110000。
A.1011B.1101C.1010 D.1111B 2.字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的()。
A.66 B.5A C.50 D.视具体的计算机而定A 3.右图是一棵二叉树,它的先序遍历是()。
A.ABDEFC B.DBEFAC C.DFEBCA D.ABCDEFD 4.寄存器是()的重要组成部分。
A.硬盘B.高速缓存C.内存D.中央处理器(CPU)B 5.广度优先搜索时,需要用到的数据结构是()。
A.链表B.队列C.栈D.散列表A 6.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指()。
A.程序运行时理论上所占的内存空间B.程序运行时理论上所占的数组空间C.程序运行时理论上所占的硬盘空间D.程序源文件理论上所占的硬盘空间C 7.应用快速排序的分治思想,可以实现一个求第K大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为()。
A.O(n2)B.O(n log n)C.O(n)D.O(1)D 8.为解决Web应用中的不兼容问题,保障信息的顺利流通,()制定了一系列标准,涉及HTML、XML、CSS等,并建议开发者遵循。
A.微软B.美国计算机协会(ACM)C.联台国教科文组织D.万维网联盟(W3C)B 9.体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。
这种站队的方法类似于()算法。
A.快速排序B.插入排序C.冒泡排序D.归并排序A 10.1956年()授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发现。
(word完整版)NOIP提高组初赛历年试题及答案阅读题篇,.docx
(word完整版)NOIP提高组初赛历年试题及答案阅读题篇,.docxNOIP 提高组初赛历年试题及答案阅读题篇程序写果(共 4 ,每 8 分,共 32 分)程序的最好方法并非是依次从到尾。
程序不像迷,我无法从末尾几找到答案,也不像一本引人入的籍,只需直接翻到褶最多的那几,我就能找到最精彩的片断。
因此我在程序,最好逐一考察研究每一段代,搞清楚每一段代的来去脉,理解每一段代在程序中所起的作用,而形成一个虚的程序构,并以此基来行。
1、分:高入手,逐深入,正确理解程序。
2、写注解:固化、、提已有的理解成果。
3、先模:根据代序跟踪量,模运算。
4、找律:先模几次循后,找出背后的律。
5、看功能:从代构和运算果判断程序功能。
6、猜算法:有不知道算法,通构和函数猜一猜。
7、方法:了解程序本后,一个熟悉的方法。
大多数人来,写程序是令人开心的一件事情,人的程序却很痛苦,很恐惧,宁愿自己重写一遍。
其到好的程序,就像一篇美文,令人心神怡,豁然开朗,因背后是一个人的思,甚至整个人生。
人的程序不可以巩固自己的知,启自己的思,提升自己的修养,你收,其,也是在学、在、在工作中的最重要、最常用的基本功。
如果写程序是把自己的思化代,程序就是把代化你理解的人的思。
当你程序有烈的代入感,像演一,真正入到的精神世界,面部表情也随之日丰富起来。
祝你!你通关了!之,看得多,得多,拼得多,你就考得多??NOIP2011-1 .#include#includeusing namespace std;const int SIZE = 100;int main(){int n,i,sum,x,a[SIZE];cin>>n;memset(a,0,sizeof(a));for(i=1;i<=n;i++){cin>>x;a[x]++;}i=0;sum=0;while(sum<(n/2+1)){i++;sum+=a[i];}cout<<i<<endl;< p="">return 0;}输入:114 5 6 6 4 3 3 2 3 2 1一步步模拟,注意输出的是sum超出循环条件时的i 值(中位数),而不是sum ,也不是a[x]输出: 3NOIP2011-2 .#include using namespace std; int n;void f2(int x,int y); void f1(int x,int y){if(x<n)< p="">f2(y,x+y);}void f2(int x,int y){cout<<x<<' ';<="" p="">f1(y,x+y);}int main(){cin>>n;f1(0,1);return 0;}输入: 30此为简单的递归题,依次输出f2(x,y)中的x值,注意边界条件时f1(x,y)的x>=30咦!这不是隔一个输出一个的Fibonacci吗?输出: 1 2 5 13 34 NOIP2011-3 .#includeusing namespace std; const int V=100;int n,m,ans,e[V][V];bool visited[V];void dfs(int x,intlen){int i;visited[x]= true;if(len>ans)ans=len;for(i=1;i<=n;i++)if( (!visited[i]) &&(e[x][i]!=-1) ) dfs(i,len+e[x][i]); visited[x]=false;}int main(){int i,j,a,b,c;cin>>n>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++)e[i][j]=-1;for(i=1;i<=m;i++){cin>>a>>b>>c;e[a][b]=c;e[b][a]=c;}for(i=1;i<=n;i++)visited[i]=false;ans=0;for(i=1;i<=n;i++)dfs(i,0);cout<<ans<<endl;< p="">return 0;}输入:4 61 2 102 3 203 4 304 1 401 3 502 4 60一看就知这是深搜算法(DFS ),输入是个四个顶点的无向图(邻接矩阵如下):如len>ans,则ans=len,可以说明这是个在图中用DFS找最长的路径的程序。
NOIP2011提高组试题-day1
全国信息学奥林匹克联赛(NOIP2011)复赛提高组 day1(请选手务必仔细阅读本页内容)一.题目概况中文题目名称铺地毯选择客栈 mayan游戏英文题目与子目录名 carpet hotel mayan 可执行文件名 carpet hotel mayan 输入文件名 carpet.in hotel.in mayan.in 输出文件名 carpet.out hotel.out mayan.out 每个测试点时限1秒1秒3秒测试点数目 10 10 10 每个测试点分值 10 10 10 附加样例文件有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统二.提交源程序文件名对于C++语言 carpet.cpp hotel.cpp mayan.cpp 对于C语言 carpet.c hotel.c mayan.c 对于pascal语言carpet.pas hotel. pas mayan. pas三.编译命令(不包含任何优化开关)对于C++语言g++ -o carpetcarpet.cpp -lm g++ -o hotelhotel.cpp -lmg++ -o mayanmayan.cpp -lm对于C语言gcc -o carpetcarpet.c -lm gcc -o hotel hotel.c-lmgcc -o mayanmayan.c -lm对于pascal语言fpc carpet.pas fpc hotel.pas fpc mayan.pas四.运行内存限制内存上限128M 128M 128M注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU P4 3.0GHz,内存1G,上述时限以此配置为准。
4、特别提醒:评测在NOI Linux下进行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
day1(请选手务必仔细阅读本页内容)一.题目概况中文题目名称铺地毯选择客栈 mayan游戏英文题目与子目录名 carpet hotel mayan 可执行文件名 carpet hotel mayan 输入文件名 carpet.in hotel.in mayan.in 输出文件名 carpet.out hotel.out mayan.out 每个测试点时限1秒1秒3秒测试点数目 10 10 10 每个测试点分值 10 10 10 附加样例文件有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统二.提交源程序文件名对于C++语言 carpet.cpp hotel.cpp mayan.cpp 对于C语言 carpet.c hotel.c mayan.c 对于pascal语言carpet.pas hotel. pas mayan. pas三.编译命令(不包含任何优化开关)对于C++语言g++ -o carpetcarpet.cpp -lm g++ -o hotelhotel.cpp -lmg++ -o mayanmayan.cpp -lm对于C语言gcc -o carpetcarpet.c -lm gcc -o hotel hotel.c-lmgcc -o mayanmayan.c -lm对于pascal语言fpc carpet.pas fpc hotel.pas fpc mayan.pas四.运行内存限制内存上限128M 128M 128M注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU P4 3.0GHz,内存1G,上述时限以此配置为准。
1.铺地毯(carpet.cpp/c/pas)【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有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】carpet.in carpet.out331 02 30 2 3 32 13 32 2【输入输出样例说明】如下图,1号地毯用实线表示,2号地毯用虚线表示,3号用双实线表示,覆盖点(2,2)的最上面一张地毯是3号地毯。
yx【输入输出样例2】carpet.in carpet.out-131 02 30 2 3 32 13 34 5【输入输出样例说明】如上图,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。
2.选择客栈(hotel.cpp/c/pas)【问题描述】丽江河边有n家很有特色的客栈,客栈按照其位置顺序从1到n编号。
每家客栈都按照某一种色调进行装饰(总共k种,用整数0 ~ k-1表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。
两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。
晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过p。
他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过p元的咖啡店小聚。
【输入】输入文件hotel.in,共n+1行。
第一行三个整数n,k,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;接下来的n行,第i+1行两个整数,之间用一个空格隔开,分别表示i号客栈的装饰色调和i号客栈的咖啡店的最低消费。
【输出】输出文件名为hotel.out。
输出只有一行,一个整数,表示可选的住宿方案的总数。
【输入输出样例1】hotel.in hotel.out35 2 30 51 30 21 41 5【输入输出样例说明】客栈编号 ①②③④⑤色调0 1 0 1 1 最低消费 5 3 2 4 5 2人要住同样色调的客栈,所有可选的住宿方案包括:住客栈①③,②④,②⑤,④⑤,但是若选择住4、5号客栈的话,4、5号客栈之间的咖啡店的最低消费是4,而两人能承受的最低消费是3元,所以不满足要求。
因此只有前3种方案可选。
【数据范围】对于30%的数据,有n≤100;对于50%的数据,有n≤1,000;对于100%的数据,有2≤n≤200,000,0<k≤50,0≤p≤100, 0≤最低消费≤100。
3.Mayan游戏(mayan.cpp/c/pas)【问题描述】Mayan puzzle是最近流行起来的一个游戏。
游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上。
游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下:1、每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见输入输出样例说明中的图6到图7);如果目标位置上没有方块,那么被拖动的方块将从原来的竖列中抽出,并从目标位置上掉落(直到不悬空,参见下面图1和图2);图 1 图 2 图 32、 任一时刻,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除(参见图1到图3)。
注意:a) 如果同时有多组方块满足消除条件,几组方块会同时被消除(例如下面图4,三个颜色为1的方块和三个颜色为2的方块会同时被消除,最后剩下一个颜色为2的方块)。
b) 当出现行和列都满足消除条件且行列共享某个方块时,行和列上满足消除条件的所有方块会被同时消除(例如下面图5所示的情形,5个方块会同时被消除)。
图 4 图 53、 方块消除之后,消除位置之上的方块将掉落,掉落后可能会引起新的方块消除。
注意:掉落的过程中将不会有方块的消除。
上面图1到图3给出了在棋盘上移动一块方块之后棋盘的变化。
棋盘的左下角方块的坐标为(0, 0),将位于(3, 3)的方块向左移动之后,游戏界面从图1变成图2所示的状态,此时在一竖列上有连续三块颜色为4的方块,满足消除条件,消除连续3块颜色为4的方块后,上方的颜色为3的方块掉落,形成图3所示的局面。
【输入】输入文件mayan.in ,共6行。
第一行为一个正整数n ,表示要求游戏通关的步数。
接下来的5行,描述7*5的游戏界面。
每行若干个整数,每两个整数之间用一个空格隔开,每行以一个0结束,自下向上表示每竖列方块的颜色编号(颜色不多于10种,从1开始顺序编号,相同数字表示相同颜色)。
输入数据保证初始棋盘中没有可以消除的方块。
【输出】 输出文件名为mayan.out 。
2 1 1 1 2 2 21 1 1 1 1如果有解决方案,输出n 行,每行包含3个整数x ,y ,g ,表示一次移动,每两个整数之间用一个空格隔开,其中(x ,y )表示要移动的方块的坐标,g 表示移动的方向,1表示向右移动,-1表示向左移动。
注意:多组解时,按照x 为第一关健字,y 为第二关健字,1优先于-1,给出一组字典序最小的解。
游戏界面左下角的坐标为(0,0)。
如果没有解决方案,输出一行,包含一个整数-1。
【输入输出样例1】mayan.in mayan.out 3 1 0 2 1 0 2 3 4 0 3 1 02 434 02 1 13 1 1 3 0 1【输入输出样例说明】按箭头方向的顺序分别为图6到图11样例输入的游戏局面如上面第一个图片所示,依次移动的三步是:(2,1)处的方格向右移动,(3,1)处的方格向右移动,(3,0)处的方格向右移动,最后可以将棋盘上所有方块消除。
【数据范围】对于30%的数据,初始棋盘上的方块都在棋盘的最下面一行; 对于100%的数据,0 < n ≤5。
图6 图7 图8图9 图10 图11。