【枚举Day1】20170529-2枚举算法专题练习 题解
题目: http://www.cnblogs.com/ljc20020730/p/6918328.html
评测器:cena

评测记录:

1.OneMoreRectangle 一个矩形
●如果任意枚举矩形坐标,显然不可行。数组太大,开不下!
●我们注意到,如果我们放入了矩形,矩形周围并没有其它矩形,那么稍微移动这个矩形,不会改变答案。
显然,一定存在一种方案,使得放入的矩形的边界与某些已知矩形边界重合。
我们不妨规定,放入的矩形下边界必须与已知矩形重合、左边界必须与已知矩形重合。
所以就可以做了
type rec=record
x1,y1,x2,y2:longint;
end;
var n,x,y,i,j,k,ans,max,xx,yy:longint;
a:array[..]of rec;
begin
assign(input,'rectangle.in');
assign(output,'rectangle.out');
reset(input);
rewrite(output);
readln(n,x,y);
for i:= to n do
readln(a[i].x1,a[i].y1,a[i].x2,a[i].y2);
for i:= to n do
for j:= to n do begin
xx:=a[i].x1; yy:=a[j].y1;
ans:=;
for k:= to n do
if (a[k].x1>=xx)and(a[k].x1<=xx+x)and(a[k].y1>=yy)and(a[k].y2<=yy+y)
and(a[k].x2>=xx)and(a[k].x2<=xx+x)and(a[k].y2>=yy)and(a[k].y2<=yy+y)
//这里是判断以第i个矩形的左下角坐横标X1,第j个矩形的左下角纵坐标Y1围成的X*Y的矩形能不能覆盖第k个矩形
then inc(ans);
if ans>max then max:=ans;
end;
writeln(max);
close(input);
close(output);
end.
评测记录:

2.Palindromes回文
对于目前已经实现的算法的平均时间复杂度为O(length(s)*k/2)或许更少,
但是实在想不出办法来优化,于是就这样放在这里吧!
var k,i,ans:longint;
s:ansistring;
function check(l,r:longint):boolean;//判断字符串s从l位到r位是否为回文
var th:ansistring;
i:longint;
begin
th:='';
for i:=l to r do th:=th+s[i];
for i:= to length(th)div + do
if th[i]<>th[length(th)-i+] then exit(false);
exit(true);
end;
begin
assign(input,'palin.in');
assign(output,'palin.out');
reset(input);
rewrite(output);
readln(k);
readln(s);
for i:= to length(s) do begin
if i+k->length(s) then break;
if check(i,i+k-) then inc(ans);
end;//枚举当前点和后面连这个点加起来为k位是否为回文
writeln(ans);
close(input);
close(output);
end.
评测记录:

3.ProblemSetter(问题的设置)
一开始想的复杂,选排快排一起用太复杂了点。暴力好像拿了92分!
现在讲一种很简单的办法!
排序+枚举(排序:按照简单-中等-困难的顺序输出)
解决方法是:先从小到大枚举E,再从大到小枚举H,最后从小到大枚举M,取每个值第一个遇到的解。(注意枚举不重复)
“你希望难度差尽量接近”定义一个函数F(x,y,z:longint):longint;
function F(x,y,z:longint):longint;
begin
exit(abs((a[y]-[x])-(a[z]-a[y])));
end;
接下来是程序:
var n,i,j,e,m,h,k:longint;
a:array[..]of longint;
procedure swap(var a,b:longint);
var t:longint;
begin
t:=a; a:=b; b:=t;
end;
function f(x,y,z:longint):longint;
begin
exit(abs(abs(a[y]-a[x])-abs(a[z]-a[y])));
end;
begin
assign(input,'problemsetter.in');
assign(output,'problemsetter.out');
reset(input);
rewrite(output);
readln(n);
for i:= to n do read(a[i]);
for i:= to n- do
for j:=i+ to n do
if a[i]>a[j] then swap(a[i],a[j]);
E:=; M:=; H:=n;//这是所有组合中f最大的!
for i:= to n do //任意
for k:=n downto i+ do //从最后向前推,注意第i位是E的,第i+1位是M的,所以只能到i+2
for j:=i+ to k- do //从E到H(不包含E和H)都可以选
if f(i,j,k)<f(E,M,H) then begin
E:=i;M:=j;H:=k;//迭代
end;
writeln(a[E],' ',a[M],' ',a[H]);//输出
close(input);
close(output);
end.
评测记录:

4.ColoringRectangles着色的矩形
这道题需要遵循以下步骤
提供以下样例:
输入:
输出:

(1)递归求出每一个矩形被覆盖后能看到的面积(注意从后往前枚举,后保存当前编号ans[i])。
定义一个过程:
procedure cal(l,r,b,t,z:longint); //z为从上到下的该层编号(看下还有多少可能的其他编号的矩形在上面)。
begin
while (z<=n) and ((r<=x1[z]) or (l>=x2[z]) or (t<=y1[z]) or (b>=y2[z])) do inc(z);//一些不符合条件的矩形
if z>n then begin inc(area[now],(r-l)*(t-b));exit;end; //求出area
if l<x1[z] then begin cal(l,x1[z],b,t,z+);l:=x1[z];end;
if r>x2[z] then begin cal(x2[z],r,b,t,z+);r:=x2[z];end;
if b<y1[z] then cal(l,r,b,y1[z],z+);
if t>y2[z] then cal(l,r,y2[z],t,z+);//分割成四块来求
end;
(2)按面积area从大到小,相同面积按编号从小到大编号排序
for i:= to n- do
for j:=i+ to n do
if (area[i]<area[j])or((area[i]=area[j])and(ans[i]>ans[j]))
then begin swap(area[i],area[j]); swap(ans[i],ans[j]); end;
(3)再按编号从小到大对k个编号ans[]排序,这样可以按字典序输出。
for i:= to k- do
for j:=i+ to k do
if ans[i]>ans[j] then swap(ans[i],ans[j]);
完整的程序:
var x1,y1,x2,y2,area,ans:array[..]of longint;
n,k,now,i,j:longint;
procedure swap(var a,b:longint);
var t:longint;
begin
t:=a; a:=b; b:=t;
end;
procedure cal(l,r,b,t,z:longint);
begin
while (z<=n) and ((r<=x1[z]) or (l>=x2[z]) or (t<=y1[z]) or (b>=y2[z])) do inc(z);
if z>n then begin inc(area[now],(r-l)*(t-b));exit;end;
if l<x1[z] then begin cal(l,x1[z],b,t,z+);l:=x1[z];end;
if r>x2[z] then begin cal(x2[z],r,b,t,z+);r:=x2[z];end;
if b<y1[z] then cal(l,r,b,y1[z],z+);
if t>y2[z] then cal(l,r,y2[z],t,z+);
end;
begin
assign(input,'rectangles.in');
assign(output,'rectangles.out');
reset(input);
rewrite(output);
readln(n,k);
for i:= to n do read(x1[i]); readln;
for i:= to n do read(y1[i]); readln;
for i:= to n do read(x2[i]); readln;
for i:= to n do read(y2[i]); readln;
for i:=n downto do begin
ans[i]:=i;
now:=i;
cal(x1[now],x2[now],y1[now],y2[now],i+);
end;
for i:= to n- do
for j:=i+ to n do
if (area[i]<area[j])or((area[i]=area[j])and(ans[i]>ans[j]))
then begin swap(area[i],area[j]); swap(ans[i],ans[j]); end;
for i:= to k- do
for j:=i+ to k do
if ans[i]>ans[j] then swap(ans[i],ans[j]);
for i:= to k- do write(ans[i]-,' ');
writeln(ans[k]-);
close(input);
close(output);
end.
评测记录:

【枚举Day1】20170529-2枚举算法专题练习 题解的更多相关文章
- 【枚举Day1】20170529-2枚举算法专题练习 题目
20170529-2枚举算法专题练习 题解: http://www.cnblogs.com/ljc20020730/p/6918360.html 青岛二中日期 序号 题目名称 输入文件名 输出文件名 ...
- NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 最短路 Floyd 基本思路:枚举所有点与点的中点,如果从中点走最短,更新两点间 ...
- 【转载】[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类
关键代码: using System; using System.Collections; using System.Collections.Generic; using System.Compone ...
- [asp.net mvc 奇淫巧技] 03 - 枚举特性扩展解决枚举命名问题和支持HtmlHelper
一.需求 我们在开发中经常会遇到一些枚举,而且这些枚举类型可能会在表单中的下拉中,或者单选按钮中会用到等. 这样用是没问题的,但是用过的人都知道一个问题,就是枚举的命名问题,当然有很多人枚举直接中文命 ...
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
JAVA进阶之旅(一)--增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还有很 ...
- 枚举进行位运算 枚举组合z
枚举进行位运算--枚举组合 public enum MyEnum { MyEnum1 = , //0x1 MyEnum2 = << , //0x2 MyEnum3 = << , ...
- [算法专题] LinkedList
前段时间在看一本01年出的旧书<effective Tcp/Ip programming>,这个算法专题中断了几天,现在继续写下去. Introduction 对于单向链表(singly ...
- 在C#中对枚举进行位运算--枚举组合
由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1, ...
- 枚举类型与位域枚举Enum
一.概述 定义一个值类型,其中包含固定值集合.枚举类型变量可以是此集合中的任意一个或多个值.枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...
随机推荐
- ubuntu系统中添加DNS服务器地址后诡异消失的解决办法
今天查看了一下自己电脑里的ubuntu14.04系统,发现无法上网,于是ping了一下百度,出现unknown host,查了一下/etc/resolv.conf中的DNS地址,却发现我之前的修改被清 ...
- Codeforces round 1106
Div 2 536 题目链接 我还是太菜了.jpg E 傻逼DP直接做 我居然调了1.5h 我真的是太菜了.jpg 堆+扫描线直接维护每个位置的贪心结果 然后要么使用干扰 要么就接受贪心的结果 #in ...
- 欢迎到我的新Blog!
https://winniechen.cn 里面的页面还不是很好看...争取改一下! 里面的题解大部分也会在这里更新! 谢谢各位捧场!
- 翻译 | The Principles of OOD 面向对象设计原则
本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/Q_pziBUhKRywafKeY2T7YQ 作者:Robert C. Martin 翻译:张硕 本文由来 ...
- 【CobaltStrike】CobaltStrike简介与使用
CobaltStrike简介与使用 0x00 简介 1. 什么是CobaltStrike?可以用来做什么? CobatStrike是一款基于java编写的全平台多方协同后渗透攻击框架.CobaltSt ...
- MiZ702学习笔记10——文本实例化IP的方法
之前,添加vivado自带IP的时候,都是以图形化的方式:一般是新建一个Block Design顶层文件,然后将图形化的ip贴到,Block Design中. 但是,在进行PL的开发过程中,有时不想使 ...
- 表单设置 disabled 后无法传值到后台的解决办法
在提交 from 表单时,下面的 input 无法正常提交给后台, 发现,如果input的字段设为disabled,该表单是无法提交的. <input type="text" ...
- Spring的单例模式底层实现学习笔记
单例模式也属于创建型模式,所谓单例,顾名思义,所指的就是单个实例,也就是说要保证一个类仅有一个实例.单例模式有以下的特点:①单例类只能有一个实例②单例类必须自己创建自己的唯一实例③单例类必须给所有其他 ...
- 移动webapp的那些令你头疼的事
bug持续更新中... 测试浏览器 Chrome: 61.0.3163.73 Safari: 10.0(IOS 10.3.3) Github: webapp-bugs 1. IOS overflow: ...
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}Setting property 'source' to 'org.eclipse
当你用Eclipse运行web项目的时候,你就会看到控制台出现:WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Set ...