[2018.04.17][水][日志][7][#188][USACO 3.1 Shaping Regions][漂浮大陆][背景-amp;amp;amp;gt;][表示为什么如此虚伪+纯模拟一只]

本文主要是介绍[2018.04.17][水][日志][7][#188][USACO 3.1 Shaping Regions][漂浮大陆][背景-amp;amp;amp;gt;][表示为什么如此虚伪+纯模拟一只],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[背景]

    这是我发的多少道模拟题了......

    本道题表面和善,内在虚伪,因为,如果用纯模拟,你的程序将一塌糊涂..

[#188][USACO 3.1 Shaping Regions]

题目描述
N个不同的颜色的不透明的长方形(1 <= N <= 1000)被放置在一张宽为A长为B的白纸上。
这些长方形被放置时,保证了它们的边与白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于边缘。 
输入格式
按顺序输入放置长方形的方法。第一行输入的是那个放在底的长方形(即白纸)。 
第 1 行: A , B 和 N, 由空格分开 (1 <=A, B<=10,000) 
第 2 到N+1行: 为五个整数 llx, lly, urx, ury, color 这是一个长方形的左下角坐标,右上角坐标和颜色。 
颜色 1和底部白纸的颜色相同。 (1 <= color <= 2500) 
输出格式
输出文件应该包含一个所有能被看到颜色连同该颜色的总面积的清单( 即使颜色的区域不是连续的),按color的增序顺序。 
不要显示没有区域的颜色。 
样例数据
input
20 20 3
2 2 18 18 2
0 8 19 19 3
8 0 10 19 4
output
1 91
2 84
3 187

4 38

[分析]

    这道题虚伪就虚伪在数据量上,如果使用O(n^2)算法暴搜,我们将:1,定义不了那么大的数组2.严重超时

    现在就GG了,怎么做才比较虚伪地AC呢?

    根据大神的说法,我们引入一个新名词,“漂浮法”,类似于...向菜刀上落饼干,饼干会一份两半移开....

    这就为递归打好了准备...


很好!程序的主体已经完成,现在只要虚伪出核心代码了!


总结来说,我们在思考这类题目时可以考虑一反常识,进行计算

[code]

#include<bits/stdc++.h>
using namespace std;
int x_1[1002],y_1[1002],x_2[1002],y_2[1002];
int color[1002]={1},cnt[2502],N;
void cover(int lx,int ly,int rx,int ry,int c,int h);
int main(void)
{
	cin>>x_2[0]>>y_2[0]>>N;
	for(int i=1;i<=N;i++)	cin>>x_1[i]>>y_1[i]>>x_2[i]>>y_2[i]>>color[i];
cnt[color[N]]+=(y_2[N]-y_1[N])*(x_2[N]-x_1[N]);
for(int i=N-1;i>=0;i--)	cover(x_1[i],y_1[i],x_2[i],y_2[i],color[i],i+1);
for(int i=1;i<=2500;++i)	if(cnt[i])	cout<<i<<" "<<cnt[i]<<endl;
	return 0;
}
void cover(int lx,int ly,int rx,int ry,int c,int h)
{
	if(lx==rx||ly==ry)	return;
	if(h>N)	cnt[c]+=(rx-lx)*(ry-ly);
	else
	{	if(ly<y_1[h])	cover(min(lx,x_2[h]),ly,min(rx,x_2[h]),min(y_1[h],ry),c,h+1);	if(rx>x_2[h])	cover(max(x_2[h],lx),min(y_2[h],ly),rx,min(y_2[h],ry),c,h+1);	if(ry>y_2[h])	cover(max(lx,x_1[h]),max(y_2[h],ly),max(rx,x_1[h]),ry,c,h+1);	if(lx<x_1[h])	cover(lx,max(y_1[h],ly),min(x_1[h],rx),max(y_1[h],ry),c,h+1);
	}
	return;
}

这篇关于[2018.04.17][水][日志][7][#188][USACO 3.1 Shaping Regions][漂浮大陆][背景-amp;amp;amp;gt;][表示为什么如此虚伪+纯模拟一只]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682642

相关文章

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

改变背景颜色+碰撞检测

1.让类继承CCLayerColor比如 class HelloWorld:public cocos2d::CCLayerColor{ public : 在.cpp文件中 bool HelloWorld::init(){ if(!CCLayerColor::initWithColor(ccc4(255,255,255,25

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid = ({src,name,size,link,}: {src: any;name: any;size?: any;link?: any;}) => (<Box sx={{ display: "flex", flexDirecti

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

CSS背景属性:打造丰富视觉效果的背景设计

在网页设计中,背景是创建视觉吸引力和设置页面基调的重要元素。CSS提供了多种背景属性来控制元素的背景样式,包括颜色、图像、尺寸、位置和重复方式。本文将详细介绍CSS中的背景属性,包括background简写属性以及background-color、background-image、background-repeat、background-position和background-size等属性。

shader language学习(1)——shader language简介背景

shader language,称为着色语言,shade在英语是阴影、颜色深浅的意思。shader language基于物体本身属性和光照条件,计算美格橡塑的颜色值。 实际上这种解释具有明显的时代局限性,在GPU编程发展的早期,shader language的提出目标是加强对图形处理算法的控制,所以对该语言的定义也针对于此。但随着技术的进步,目前的shader language早已经用于通用计算

linux匹配Nginx日志,某个字符开头和结尾的字符串

匹配 os=1 开头, &ip结尾的字符串 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ 存入日志。然后使用submit 前面和后面的值去掉,剩下就是需要的字符串。 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ >log.log

C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV

题目: 题解: int maxProfit(int k, int* prices, int pricesSize) {int n = pricesSize;if (n == 0) {return 0;}k = fmin(k, n / 2);int buy[k + 1], sell[k + 1];memset(buy, 0, sizeof(buy));memset(sell, 0, size