`
zqynux
  • 浏览: 36796 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

USACO 3.1 Shaping Regions 形成的区域

阅读更多
  这题二话不说, 用map[i][j]表示坐标为i, j的点是什么颜色的.. 很快就写出来了, 但是内存超过了,, 内存最多16MB.
  没办法, 只好另辟思路, 但是在数据压缩方面我又很弱, 就看标程也花了两三天的时间, 今天终于是看懂了..
  用rect记录所有矩形的坐标以及相应的颜色.
  程序具体的步骤如下:

  输入A, B, N. 记录第一个矩形: (0, 0) (A, B), 颜色为1
  接着读入其余的矩形, 设当前是第i个
  对i之前所有的矩形迭代, 此时迭代到的是第j个.
  判断i是否完全包含j, 即: i.x1 >= j.x1 && i.x2 >= j.x2 && i.y1 <= j.y1 && i.y2 >= j.y2..
    若全包围的话, 将第j个矩形删除.
  如果没包围的话, 就判断i会将j拆分成几个矩形, 并将j删除, 再分别拆分的矩形分别放入rect中.
/*
LANG: C
ID: zqy11001
PROG: rect1
*/
#include <stdio.h>
#include <string.h>
#define MAX 10001
#define getint(i) scanf("%d", &i)
#define loop(i, j, k, l)\
if(a.i l b.i){\
	t = a;\
	t.j = b.k;\
	tmp[n++] = t;\
	a.i = b.i;\
}

struct rect{
	int t;
	int x1, x2, y1, y2;
}rect[MAX];
int rr;
int color[2500];

int func(struct rect a, const struct rect b, struct rect *tmp)
{
	int n;
	struct rect t;
	if(b.x1 >= a.x2 || b.x2 <= a.x1 || b.y1 >= a.y2 || b.y2 <= a.y1){
		return 0;
	}
	if(b.x1 <= a.x1 && b.x2 >= a.x2 && b.y1 <= a.y1 && b.y2 >= a.y2){
		return -1;
	}

	n = 0;
	loop(x1, x2, x1, <=);
	loop(x2, x1, x2, >=);
	loop(y1, y2, y1, <=);
	loop(y2, y1, y2, >=);
	return n;
}

int main(void)
{
	int n, nr, m;
	int a, b, i, j, k;
	struct rect t[4], cur;
	freopen("rect1.in", "r", stdin);
	freopen("rect1.out", "w", stdout);
	getint(a);
	getint(b);
	getint(n);

	rect[0].x1 = rect[0].y1 = 0;
	rect[0].x2 = a;
	rect[0].y2 = b;
	rect[0].t = 1;

	rr = 1;
	for(i = 1; i <= n; i++){
		scanf("%d%d%d%d%d", &rect[rr].x1, &rect[rr].y1, 
				&rect[rr].x2, &rect[rr].y2, &rect[rr].t);
		cur = rect[rr++];
		nr = rr - 1;
		for(j = 0; j < nr; j++){
			m = func(rect[j], cur, t);
			if(!m){
				continue;
			}
			if(m < 0){
				memmove(rect + j, rect + j + 1,
					sizeof(struct rect) * (rr - j - 1));
				j--;
				rr--;
				nr--;
				continue;
			}
			rect[j] = t[--m];
			while(m--){
				rect[rr++] = t[m];
			}
		}
	}
	memset(color, 0, sizeof(color));
	for(i = 0; i < rr; i++){
		color[rect[i].t - 1] += (rect[i].x2 - rect[i].x1) *
				(rect[i].y2 - rect[i].y1);
	}

	for(i = 0; i < 2500; i++){
		if(color[i]){
			printf("%d %d\n", i + 1, color[i]);
		}
	}
	return 0;
}
分享到:
评论

相关推荐

    usaco3.1解题报告1

    Kruskal算法则是按照边的权重从小到大排序,每次添加一条不形成环的新边,直到所有顶点都在同一棵树中。 输入格式要求给出农场的数量N和一个N×N的距离矩阵,表示农场之间的距离。输出是所有农场间连接的最小光纤总...

    USACO 3.1 humble 解答

    做的很辛苦, 里面附有注释,大家支持一下吧...

    usaco.rar_USACO 翻译 下载_usaco _usaco 翻译

    USACO,全称为United States阿Olympiad in Informatics,是美国计算机奥林匹克竞赛,旨在为高中生提供一个学习和展示编程技能的平台。这个比赛涵盖了算法、数据结构以及问题解决等多个方面,对于想要深入理解计算机...

    usaco 2010-2011

    ### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...

    USACO题集及答案

    USACO,全称为United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、问题解决和编程能力。该比赛每年举行,分为青铜、白银、黄金和铂金四个级别,难度逐渐递增。...

    usaco 合集usaco 合集usaco 合集

    《USACO 合集:全面解析与学习指南》 USACO,全称为USA Computing Olympiad,是一项针对中学生举办的在线编程竞赛,旨在提升参赛者的算法设计和问题解决能力。这个合集提供了丰富的资源,包括英文原题、中文译题、...

    USACO翻译及题解

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者在算法设计、问题解决以及计算机科学基础方面的技能。这个压缩包文件提供了丰富的资源,帮助参赛者或学习者更好...

    usaco traning全部数据

    【标题】"usaco traning全部数据" 涉及的是一个编程竞赛训练平台——USACO(USA Computing Olympiad)的数据集。USACO是一个专门为美国中学生设计的在线编程竞赛,旨在提升参赛者的算法设计和编程能力,特别是在解决...

    USACO-Chapter1.rar_it_usaco

    《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...

    usaco历年测试数据

    USACO(美国计算机奥林匹克竞赛)是面向全球中学生的一项编程竞赛,主要涉及算法和问题解决能力。这个压缩包文件“usaco历年测试数据”包含了该赛事历年的测试题目和样例输入输出数据,这对于参赛者准备比赛或者提升...

    USACO 1.1 c++源程序

    USACO,全称为United States Computer Olympiad,是一项面向中学生的国际性计算机编程竞赛,旨在提升参赛者的算法设计和编程能力。USACO比赛通常使用C++语言进行,因此"USACO 1.1 c++源程序"指的是USACO入门阶段1.1...

    USACO答案及详解

    某些USACO题目的答案,很详细,代码清晰结构良好,算法高效易于调试

    USACO历年比赛测试数据:2004年

    USACO,全称United States Computer Olympiad,是美国计算机奥林匹克竞赛,是一项旨在培养青少年编程技能和算法理解的国际性比赛。这个比赛对于有志于在计算机科学领域深入发展的学生来说,具有很高的学习价值和挑战...

    usaco心得及总结

    ### USACO心得及总结 #### 第一部分 动态规划 **USACO**(美国计算机奥林匹克竞赛)作为一项国际知名的编程竞赛,不仅考验参赛者的编程能力,还对其算法理解和应用有着极高的要求。其中,动态规划(Dynamic ...

    USACO全部测试数据.zip

    USACO,全称United States阿Olympiad in Computer Science,是美国计算机科学奥林匹克竞赛,旨在激发中学生对计算机科学的兴趣,尤其是算法和编程技能。这个"USACO全部测试数据.zip"压缩包包含了历年来USACO比赛的...

    USACO历年比赛测试数据:2003年

    USACO(USA Computing Olympiad)是美国计算机奥林匹克竞赛,是一项面向中学生的编程竞赛,旨在提升学生的算法设计、编程和问题解决能力。该比赛通常包括训练营和一系列在线比赛,最终选拔出优秀选手代表美国参加...

    USACO题解+代码+翻译

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、编程能力和问题解决能力。本压缩包包含了USACO比赛的题解、源代码以及对应的中文翻译,对于想要...

    USACO全部测试数据

    《USACO全部测试数据详解》 USACO,全称United States Computer Olympiad,是美国计算机奥赛,是一项旨在提升青少年计算机编程能力的竞赛。该竞赛覆盖了基础算法、数据结构、问题解决等多个计算机科学的重要领域,...

    USACO做题代码

    USACO,全称为United States Computer Olympiad,是一项面向中学生的国际性计算机编程竞赛,旨在提升参赛者在算法设计、问题解决以及编程方面的技能。USACO比赛通常包含多个编程题目,参赛者需要使用C++、Java等语言...

Global site tag (gtag.js) - Google Analytics