数长方形有多少个?POJ(1693)
2016-06-20 19:23
218 查看
题目链接:http://poj.org/problem?id=1693
解题报告:
随机选两根横的,再找一下与这两根横线相交的竖线有多少根,m,那么就有(m-1)*m/2个长方形。
解题报告:
随机选两根横的,再找一下与这两根横线相交的竖线有多少根,m,那么就有(m-1)*m/2个长方形。
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; const int maxn = 100; struct line { int x[2]; int y[2]; }row[maxn],col[maxn]; int n; int main() { int Case; cin>>Case; int r,c; while(Case--) { r=c=0; int ans=0; cin>>n; for(int i=0;i<n;i++) { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if(y1==y2) ///水平 { row[r].x[0]=min(x1,x2); row[r].x[1]=max(x1,x2); row[r].y[0]=y1; row[r++].y[1]=y2; } else { ///垂直 col[c].y[0]=min(y1,y2); col[c].y[1]=max(y1,y2); col[c].x[0]=col[c].x[1]=x1; c++; } } int maxr,minr,maxc,minc; int tmp; for(int i=0;i<r-1;i++) { for(int j=i+1;j<r;j++) { if(row[i].x[1]<row[j].x[0]||row[i].y[0]==row[j].y[0]) continue; tmp=0; minr=max(row[i].x[0],row[j].x[0]); maxr=min(row[i].x[1],row[j].x[1]); maxc=max(row[i].y[0],row[j].y[0]); minc=min(row[i].y[0],row[j].y[0]); for(int k=0;k<c;k++) { if(col[k].x[0]>=minr&&col[k].x[1]<=maxr&&col[k].y[0]<=minc&&col[k].y[1]>=maxc) tmp++; } ans+=(tmp-1)*tmp/2; } } printf("%d\n",ans); } }
相关文章推荐
- Spring框架学习(1)
- AndroidStudio 快捷使用
- 转: 关于 ssl的建立链接的过程
- 新的博客,新的记录
- 实现复数类中的运算符重载
- 注册表写入读取和启动项删除
- 炖排骨 && 干炒虾
- Python爬虫实践(五):Cookie
- android中生成随机点
- 【leetcode】2. Add Two Numbers
- 53. Maximum Subarray
- 第15 章 输入/输出
- C#中事件的使用
- BZOJ 1062 糖果雨
- Android Studio NDK初探
- 纯原生仿ES6的Object.assign,实现深度合并对象
- Pig 学习之 日志处理
- leetcode--Roman to Integer
- Java多线程(一)基本用法
- JavaSE学习55:GUI编程之布局管理器