NOIP2011铺地毯
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提高组】铺地毯

【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的数组是可以的。
如果想要拿到满分很明显出题人不想让你定义数组来记录,我们就得再想一个办法了。
其实仔细想想根本就不用定义标记啊,对于每个地毯我们只需要判断它时候覆盖住所求点就好了啊,如果覆盖,那就迭代。
NOIP2011模拟试题及解析

NOIP2011模拟试题及解析128MClass(class.pas/c/cpp)【问题描述】信息班这期的课将要结束了,老师要从现在班上的同学中选出比较优秀的同学进入下一期的学习。
而录取标准则是将平时作业和考试一起考虑,综合成绩排在前面的则录取。
经过一番思考,老师作了以下的筛选计划:1、设计两个参数x,y,学生总成绩为平时成绩的x%和考试成绩的y%。
2、将同学按总成绩排名,招收总成绩在前15的学生,不够15则全部录取。
注:总成绩在第15的如果有多人,则可以被同时录取。
例如:18个人总成绩从大到小依次为95,93,93,88,87,84,80,75,70,68,66,65,60,58,57,57,56,55。
那么93,93同为第2名,而88为第4名,57,57同为第15名,都被录取。
而56,55则不被录取。
老师因为招生培训的事情很忙,所以现在她把信息班学生的成绩表给了你,希望你能告诉她哪些同学被录取了。
【输入】输入文件class.in第一行有三个数N,x,y。
表示信息班有N个同学以及参数x,y。
第二行N个数,分别为A1,A2,A3 … AN。
Ai表示编号为i的同学的平时成绩。
第三行N个数,分别为B1,B2,B3 … BN。
Bi表示编号为i的同学的考试成绩。
【输出】输出文件class.out共一行,为被录取同学的编号,按照升序输出。
【输入输出样例】【数据说明】1<=N<=1000<=x,y<=1000<=平时成绩,考试成绩<=100以上数据皆为整数模拟。
首先求出所有人的总分,然后进行快排(注意第15名的并列情况),人数小于15时,输出1到n;否则将入围人员的编号进行排序升序输出。
程序如下:program zk;varp,k,h,zong:array [0..200] of longint;i,j,a,b,c,n,x,y,xian,f:longint;procedure qsort(x,y:longint);varxo,yo,zz,mid,z:longint;beginxo:=x; yo:=y;mid:=zong[(xo+yo) div 2];repeatwhile zong[xo]>mid do inc(xo);while zong[yo]<mid do dec(yo);if xo<=yo thenbeginz:=zong[xo];zong[xo]:=zong[yo];zong[yo]:=z;zz:=h[xo];h[xo]:=h[yo];h[yo]:=zz;inc(xo); dec(yo);end;until xo>yo;if x<yo then qsort(x,yo);if xo<y then qsort(xo,y);end;procedure qsorth(x,y:longint); varxo,yo,zz,mid,z:longint;beginxo:=x; yo:=y;mid:=h[(xo+yo) div 2]; repeatwhile h[xo]<mid do inc(xo);while h[yo]>mid do dec(yo);if xo<=yo thenbeginzz:=h[xo];h[xo]:=h[yo];h[yo]:=zz;inc(xo); dec(yo);end;until xo>yo;if x<yo then qsorth(x,yo);if xo<y then qsorth(xo,y); end;beginassign(input,'class.in'); assign(output,'class.out'); reset(input);rewrite(output);readln(n,x,y);for i:=1 to n doread(p[i]);readln;for i:=1 to n dobeginh[i]:=i;read(k[i]);end;for i:=1 to n dozong[i]:=p[i]*x+k[i]*y;qsort(1,n);xian:=15;if n>=15 thenbeginf:=zong[xian];while zong[xian+1]=f doxian:=xian+1;endelse xian:=n;qsorth(1,xian);for i:=1 to xian dowrite(h[i],' ');close(input);close(output);end.Clean(clean.pas/c/cpp)【问题描述】最近甲型H1N1流感病毒肆虐。
NOIp 2011

Qc
• 题目理解比较纠结 • 首先我们可以枚举校验值W来计算出所有的 值,选择最优的那一个。 • 但这样必然是要超时的。 • 可以发现随着W的增大,∑(i=1,m)Yi只会越 来越小,根据单调性可以决定使用二分的 方法求出最小的满足条件的W值,最后的答 案就是W或者W-1
验证
• 验证的时候需要预处理一个累加和的数组, 可以降低时间复杂度。 • 一个是满足条件的个数,一个是满足条件 的价值累加和。
• 建一个数组c,每一个客栈如果cost[i]>p则c[i]为1 否则为0 • 题目是求出颜色一样,中间存在至少一个c为0的 客栈对数 • 转化成他的补集,考虑颜色一样的,之间全是1的 对数,这是很好求的,O(n)的扫描得到所有连续 为1的序列,对于每个序列的对数求法就是简单的 排列组合
Manyan
• 这个时间复杂度的上界是O(kn)的,看上去 过不了,但是实际上没有达到这么大。 • 实在不放心的同学可以用stl库里的set来存 最小值,这样更新的时候会更快一点儿。
总结
• CCF是越来越欠吐槽了…… • 两天出了6道题,无图论无动规无高级数据结 构…… • 比较好拿到的分数如下: • Carpet 100 Hotel 100 Manyan 30 • Factor 100 Qc 50/100 Bus 30 • 总计 410/460 • 2011年的题目不算太难,对基础算法策略考察较 深入。
Day2
• Factor 杨辉三角/二项式定理
• Qc • Bus 二分答案验证 递推/贪心
Factor
• 简单的数学计算。 • 可以发现这就是高二学习的二项式定理 • 但是目测当时的智商不足以发现这个问题, 只知道确定系数可以使用杨辉三角。 • 用递推推出杨辉三角的每一项 • 然后直接计算输出答案,注意使用同余原 理
NOIP真题汇总

NOIP真题汇总想想在NOIP前总得做做真题吧,于是长达⼀个⽉的刷题开始了涉及2008-2016年⼤部分题⽬NOIP [2008] 4/41、传纸条:清真的三维DP2、笨⼩猴:字符串模拟3、⽕柴棒等式:打表+循环4、双栈排序:贪⼼+栈NOIP [2009] 3/42、Hankson的趣味题:数论,gcd相关3、最优贸易:建图+SPFA4、靶形数独:较难搜索+剪枝NOIP [2010] 4/41、引⽔⼊城:DP+bfs(较好)2、关押罪犯:贪⼼+并查集3、机器翻译:模拟4、乌龟棋:简单DPNOIP [2011] 5/61、铺地毯:模拟2、选择客栈:DP3、Mayan游戏:较难搜索4、计算系数:组合数5、聪明的质检员:⼆分答案+前缀和NOIP [2012] 4/61、Vigenère 密码:字符串2、国王游戏:贪⼼+⾼精4、同余⽅程:扩欧5、借教室:⼆分答案+前缀和NOIP [2013] 5/61、转圈游戏:快速幂2、⽕柴排队:逆序对+贪⼼3、货车运输:最⼩⽣成树+lca4、积⽊⼤赛:递推或者分治5、花匠:简单DPNOIP [2014] 6/61、⽣活⼤爆炸版⽯头剪⼑布:模拟2、联合权值:类树形DP3、飞扬的⼩鸟:类背包DP4、⽆线⽹络发射器选址:模拟5、寻找道路:图论,反向bfs6、解⽅程:秦九韶NOIP [2015] 6/61、神奇的幻⽅:模拟2、信息传递:拓扑排序3、⽃地主:较难搜索4、跳⽯头:⼆分答案5、⼦串:DP6、运输计划:⼆分答案+树上差分NOIP [2016] 6/61、玩具谜题:模拟2、天天爱跑步:lca+树上差分3、换教室:floyd+概率DP4、组合数问题:组合数5、蚯蚓:队列6、愤怒的⼩鸟:状态压缩DP。
CSP-J (NOIP普及组) 复赛2010-2023考查内容一览表

CSP-J (NOIP提高组) 复赛2010-2020考查内容NOIP2017提高组T4奶酪深搜、广搜、并查集T5宝藏状压DPT6列队线段树NOIP2016提高组T1玩具谜题模拟T2天天爱跑步倍增LCAT3换教室动态规划(高级)T4组合数问题前缀和、杨辉三角T5蚯蚓队列、单调性T6愤怒的小鸟状压DPNOIP2015提高组T1神奇的幻方模拟T2信息传递并查集T3斗地主动态规划(高级)、深搜T4跳石头二分T5子串滚动数组、动态规划(高级) T6运输计划二分、LCA、非递归NOIP2014提高组T1生活大爆炸版石头剪刀布模拟T2联合权值动态规划(高级)、前缀和T3飞扬的小鸟动态规划(高级)T4无线网络发射器选址枚举T5寻找道路最短路T6解方程数论、枚举NOIP2013提高组T1转圈游戏快速幂T2火柴排队归并排序、逆序对T3货车运输最小生成树、LCA、倍增T4积木大赛贪心T5花匠贪心T6华容道广搜、剪枝NOIP2012提高组T1Vigenere密码枚举、模拟T2国王游戏贪心、高精度T3开车旅行平衡树、倍增T4同余方程扩展欧几里得T5借教室线段树T6疫情控制二分、倍增NOIP2011提高组T1铺地毯模拟T2选择客栈动态规划(高级)、RMQ T3Mayan游戏T4计算系数组合数学T5聪明的质监员二分T6观光公交贪心NOIP2010提高组T1机器翻译队列T2乌龟棋动态规划T3关押罪犯二分、并查集T4引水入城广搜、动态规划T3摆渡车动态规划(高级) T4对称二叉树二叉树NOIP2017普及组序号题名考查内容T1成绩顺序结构T2图书管理员结构体排序T3棋盘深搜、剪枝T4跳*房*子二分、动态规划NOIP2016普及组序号题名考查内容T1买铅笔一重循环T2回文日期回文T3海港大模拟、队列T4魔*法*阵枚举、前缀和NOIP2015普及组序号题名考查内容T1金*币一重循环T2扫*雷*游*戏二维数组T3求和组合数学T4推销员贪心、优先队列NOIP2014普及组序号题名考查内容T1珠心算测验模拟T2比例简化枚举、gcdT3螺旋矩阵模拟、找规律T4子矩阵动态规划(高级)NOIP2013普及组序号题名考查内容T1记数问题二重循环T2表达式求值栈T3小朋友的数字动态规划(高级) T4车站分级拓扑排序NOIP2012普及组序号题名考查内容T1质因数分解一重循环、质数T2寻*宝模拟、取模T3摆花背包、动态规划T4文化之旅最短路NOIP2011普及组序号题名考查内容T1数字反转进制转换T2统计单词数字符串T3瑞士轮归并排序T4表达式的值动态规划(高级)、栈NOIP2010普及组序号题名考查内容T1数字统计二维数组T2接水问题模拟T3导*弹*拦*截贪心T4三*国*游*戏贪心、博弈。
NOIP2011普及组复赛试题

1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
【输入】输入文件名为reverse.in。
输入共1行,一个整数N。
【输出】输出文件名为reverse.out。
输出共1行,一个整数,表示反转后的新数。
【输入输出样例1】reverse.in reverse.out 123 321【输入输出样例2】Reverse.in reverse.out -380 -83【数据范围】-1,000,000,000≤N≤1,000,000,000。
2.统计单词数(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
【输入】输入文件名为stat.in,2行。
第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】输出文件名为stat.out。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
【输入输出样例1】stat.in stat.out2 0Toto be or not to be is a question【输入输出样例1说明】输出结果表示给定的单词To在文章中出现两次,第一次出现的位置为0。
冲刺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,没有比这个更优的方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NOIP2011铺地毯
题目描述
为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯,一共有n张地毯,编号从 1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
输入
输入共n+2行。
第一行有一个整数n,表示总共有n张地毯。
接下来的n行中,第i+1行表示编号i的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y轴方向的长度。
第n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。
输出
输出共1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
样例输入
3
1 0
2 3
0 2 3 3
2 1
3 3
2 2
样例输出 3。