【枚举算法Day1】20170529-2枚举算法专题练习

20170529-2枚举算法专题练习


青岛二中日期


序号


题目名称


输入文件名


输出文件名


时限


内存


算法


难度


分类


081113


1


最大矩形


rectangle.in


rectangle.out


1s


256MB


枚举


1


02枚举


081031


2


回文


palin.in


palin.out


1s


256MB


枚举、优化


1


02枚举


081008


3


问题的设置


problemsetter.in


problemsetter.out


1s


256MB


排序+枚举


1


02枚举


081031


4


矩形着色


rectangles.in


rectangles.out


1s


256MB


枚举


2


02枚举

1.OneMoreRectangle一个矩形

【题目描述】

在一个平面上有一些矩形。矩形的边都与坐标轴平行。矩形允许相交、重叠。你的任务是,在平面上再放入一个边与坐标轴平行的矩形,且覆盖尽量多的已有矩形。

我们用四个整数来表示一个矩形,x1,y1,x2,y2,分别表示矩形的横纵坐标最小值、横纵坐标最大值。若矩形a的坐标为x1,y1,x2,y2,矩形A的坐标为X1,Y1,X2,Y2,则a能被A覆盖当且仅当X1<=x1<x2<=X2,且Y1<=y1<y2<=Y2。

【输入文件】第一行有三个整数n,X,Y,分别表示已有矩形个数、你要放入的矩形的边长(也就是X=X2-X1,Y=y2-y1)。你放入的矩形的大小必须同规定大小相同,位置由你决定。

接下来n行,每行4个整数x1,y1,x2,y2,表示已知矩形的坐标。

【输出文件】只有一个整数,表示你最多可以覆盖几个已有矩形。

【输入样例】

3 2 2

1 1 2 2

2 2 3 3

3 3 4 4

【输出样例】2

【数据规模和约定】

n<=50;

所有给定坐标的绝对值不超过109

所有给定坐标保证x1<x2,y1<y2;

X和Y是不超过109的正整数。

2.Palindromes回文

【题目描述】一个回文串指的是,左右翻转后同原串相同的串。

给定一个数k(2<=k<=30000)和一个非空字符串S,S的长度不超过30000且只含小写字母。请你求出,S中有多少个不同的长度为k的回文子串。一个串的子串指的是它的连续的一部分。

本题中,两个长度为k的子串不同,当且仅当它们的起始位置不同。

【输入文件】第一行整数k。

第二行串S。

【输出文件】一个整数,表示不同的回文串个数。

【输入样例】

5

ababab

【输出样例】2

【题解】

分析k的奇偶时,奇时需从k%2+1至len-k%2枚举,而偶时需从k%2至len-k%2开始向左右两枚举K长回文。(%表示求MOD)

定义function check(l,r,t:longint):boolean;//判断是否回文,l,r分别向两边“扩展” t=k/2。

3.ProblemSetter(问题的设置)

【题目描述】

你要为一场比赛出题。从已有的题目中,你要选择三道不同的题:一道简单题、一道中等题,以及一道难题。每道题目都有一个整数的难度值。值越大,题目越难。假设E表示你选择的简单题的难度,M表示中等题难度,H表示难题难度,则必须保证E<=M<=H。你希望难度差尽量接近,也就是说,假设D1=M-E,D2=H-M,则|D1-D2|应该最小。如果有多种方案,选择其中E最小的。如果仍有多种方案,选择其中H最大的。如果还有多种方案,选择其中M最小的。

【输入文件】第一行一个整数n,表示题目数量。第二行n个整数,表示每道题的难度。

【输出文件】输出一行三个整数表示选择的题目难度。按照简单-中等-困难的顺序输出。中间用一个空格隔开。行尾不要有空格。

【输入样例】

5

1 2 3 4 5

【输出样例】

1 3 5

【样例说明】

此时,D1=D2=2。

【数据规模和约定】

3<=n<=50

难度是不超过1000的正整数。

4.ColoringRectangles着色的矩形

【题目描述】

在平面中给定N个与坐标轴平行的矩形,第i个矩形的左下角坐标是(x1[i],y1[i]),右上角坐标是(x2[i],y2[i])。

你的任务是从中选择K个矩形,使得所选矩形可视面积最大。如果一些矩形有重叠,那么重叠部分只有编号最大的矩形才可视。换句话说,编号大的矩形“盖”在编号小的矩形之上。请你输出选择的K个矩形的编号。如果有多种方法,输出字典序最小的一组。

【输入文件】

第一行两个整数N,K。

第二行N个整数,表示x1[0]..x1[N-1]。

第三行N个整数,表示y1[0]..y1[N-1]。

第四行N个整数,表示x2[0]..x2[N-1]。

第五行N个整数,表示y2[0]..y2[N-1]。

【输出文件】

一行K个非负整数,表示选择的矩形的编号。编号之间用一个空格隔开。

【输入样例】

3 2

1 3 2

1 2 5

5 7 9

3 4 7

【输出样例】

1 2

【样例说明】

选择矩形0,1,面积为6+8=14

选择矩形0,2,面积为6+14=20

选择矩形1,2,面积为8+14=22。

【数据规模和约定】

1<=N<=50

-10000<=所有坐标<=10000

对于任意i,x1[i]<x2[i],y1[i]<y2[i]

时间: 2024-10-18 17:58:57

【枚举算法Day1】20170529-2枚举算法专题练习的相关文章

【枚举算法Day1】20170529-2枚举算法专题练习 题解

1.OneMoreRectangle 一个矩形 ●如果任意枚举矩形坐标,显然不可行.数组太大,开不下!●我们注意到,如果我们放入了矩形,矩形周围并没有其它矩形,那么稍微移动这个矩形,不会改变答案.显然,一定存在一种方案,使得放入的矩形的边界与某些已知矩形边界重合.我们不妨规定,放入的矩形下边界必须与已知矩形重合.左边界必须与已知矩形重合. 所以就可以做了 1 type rec=record 2 x1,y1,x2,y2:longint; 3 end; 4 var n,x,y,i,j,k,ans,m

图灵算法群《啊哈算法》领读

--图灵算法群阅读计划(第一期) 领读人:Zoctopus·Lian 本书特色 一本充满智慧和趣味的算法入门书.没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点. 书中涉及到的数据结构有栈.队列.链表.树.并查集.堆和图等:涉及到的算法有排序.枚举.深度和广度优先搜索.图的遍历,当然还有图论中不可以缺少的四种最短路径算法.两种最小生成树算法.割点与割边算法.二分图的最大匹配算法等. 书中通过幽默的语言配以可爱的插图来讲解算法,使用C语言实现. 适合读者 适合算法零基础入门和喜爱编程的朋友(

BSGS算法_Baby steps giant steps算法(无扩展)最强详解,你从未见过的详细

Baby Steps-Varsity Giant Step-Astronauts(May'n?椎名慶治) 阅读时可以听听这两首歌,加深对这个算法的理解.(Baby steps少女时代翻唱过,这个原唱反而不是很有名……Giant Step就比较碉,是一个假面骑士片的插曲,由超碉的May'n和一个人建立的临时组合唱的,怕不怕) 这个主要是用来解决这个题: A^x=B(mod C)(C是质数),都是整数,已知A.B.C求x. 我在网上看了好多介绍,觉得他们写得都不够碉,我看不懂…于是我也来写一发. 先

【转载】算法设计之五大常用算法设计方法总结

转载自http://blog.csdn.net/zolalad/article/details/11393915 算法设计之五大常用算法设计方法总结 一.[分治法]  在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)--等.任

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil 不管是普通简单值类型还是引用类型 那我就是要让这个属性默认值为空,为nil 怎么办呢,很简单,用语法,在定义这个属性的时,在类型后面声明一个? 这样就表示这个属性除了指定类型的默认值外还可以是一个可为空的类型 在Java中,最常见的错误类型就是NullPoinExecption, 为什么就是要有Nu

基本算法研究1-冒泡排序算法测试

基本算法研究1-冒泡排序算法测试 1.经典冒泡排序法基本原理 先看一个动态图,感觉比较形象: 冒泡排序(Bubble Sort)是一种简单的排序算法.默认是从小到大排序,即把最大的数据排在最后,相当于每次把最大数据像气泡一样浮到水面一样.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换. 基本步骤: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个.        2.对每一对相邻元素作同样的工作,从开始第一对

【机器学习算法-python实现】采样算法的简单实现

1.背景 采样算法是机器学习中比较常用,也比较容易实现的(出去分层采样).常用的采样算法有以下几种(来自百度知道): 一.单纯随机抽样(simple random sampling) 将调查总体全部观察单位编号,再用抽签法或随机数字表随机抽取部分观察单位组成样本. 优点:操作简单,均数.率及相应的标准误计算简单. 缺点:总体较大时,难以一一编号. 二.系统抽样(systematic sampling) 又称机械抽样.等距抽样,即先将总体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k

【JavaScript】【算法】JavaScript版排序算法

JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) 1 //排序算法 2 window.onload = function(){ 3 var array = [0,1,2,44,4, 4 324,5,65,6,6, 5 34,4,5,6,2, 6 43,5,6,62,43, 7 5,1,4,51,56, 8 76,7,7,2,1, 9 45,4,6,7,8]; 10 //var array = [4,2,5,1,0,3]; 11 array