矩形合并
2015-08-13 22:58
288 查看
http://www.acmicpc.sdnu.edu.cn/problem/show/1016
不是很难,让我自己东弄弄西弄弄,弄的特别复杂。一开始每个点的遍历果断的TLE,然后想到了结构体,但是写判断的过程时,脑子过了一遍就发现了无数种的覆盖可能。没办法了,找同学要的源码,一开始,也没看明白,慢慢的理解,((!(juxing[i].a>=juxing[j].c||juxing[j].a>=juxing[i].c||juxing[i].b>=juxing[j].d||juxing[j].b>=juxing[i].d))这句话是关键,前面加了一个!,那不就把不覆盖的情况去掉了,就是 覆盖的情况了吗?不覆盖的情况很少啊。体现了一个正难则反的原则。
不是很难,让我自己东弄弄西弄弄,弄的特别复杂。一开始每个点的遍历果断的TLE,然后想到了结构体,但是写判断的过程时,脑子过了一遍就发现了无数种的覆盖可能。没办法了,找同学要的源码,一开始,也没看明白,慢慢的理解,((!(juxing[i].a>=juxing[j].c||juxing[j].a>=juxing[i].c||juxing[i].b>=juxing[j].d||juxing[j].b>=juxing[i].d))这句话是关键,前面加了一个!,那不就把不覆盖的情况去掉了,就是 覆盖的情况了吗?不覆盖的情况很少啊。体现了一个正难则反的原则。
#include<iostream> #include<stdio.h> #include<cmath> #include<string> #include<algorithm> using namespace std; struct MyStruct { int a, b, c, d; int id; }juxing[105]; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { scanf_s("%d%d%d%d", &juxing[i].a, &juxing[i].b, &juxing[i].c, &juxing[i].d); juxing[i].id = i; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (juxing[i].id!=juxing[j].id) { if (!(juxing[i].a>=juxing[j].c||juxing[j].a>=juxing[i].c||juxing[i].b>=juxing[j].d||juxing[j].b>=juxing[i].d)) { if (juxing[i].id<juxing[j].id) { juxing[j].id = juxing[i].id; } else { juxing[i].id = juxing[j].id; } } } } } int daan = 0; for (int i = 0; i < n; i++) { if (juxing[i].id==i) { daan++; } } cout << daan << endl; system("pause"); return 0; }
相关文章推荐
- 黑马程序员--java概述
- 设置TextView显示的文字可以复制
- android在framework层增加自己的service仿照GPS
- 设置TextView显示的文字可以复制
- 并查集实现Tarjan算法
- django book学习笔记――模型高级进阶
- coj 1006: SAW 运气题,输出一个大写字母,一直提交。
- 用tomcat部署web工程
- HTML常用标签及属性
- linux 常用命令
- n项求和
- 剑指offer面试题java实现之题5:逆序打印链表
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)
- Mac下删除安装的pkg
- UVA 10911 Forming Quiz Teams
- 欢迎使用CSDN-markdown编辑器
- 数字累加程序例子
- coj 1202: 剪刀石头布
- 黑马程序员———面向对象之继承super和final关键字
- Oracle 学习之RAC(七) 集群启动解析