FZU 1015 土地划分
Description
在Dukeswood这块土地上生活着一个富有的农庄主和他的几个孩子。在他临终时,他想把他的土地分给他的孩子。他有许多农场,每个农场都是一块矩形土地。他在农场地图上划上一些直线将矩形分成若干块。当他划直线时,他总是从矩形边界上的某一点划到另一个矩形边界上的点,这条线的结束点将成为下一条线的起始点。他划线时从不会让任三线共点。例如图1是某一种划分结果。
图1
划分的起始点和结束点均以五角星标记。当他完成划分后,他想要数一下划出的土地的块数以确保每个孩子都有一块地。例如,图1中土地被划分成18块。然而这个庄主由于年迈常会数错,因而他寻求你的帮助。
请写一个程序,输入原来的土地尺寸及线段的位置,输出划分出的土地块数。
Input
第一行输入地图的宽度w (1<=w<=1000)和高度 h (1<=h<=1000),均为整数。
第二行输入线段数L (1<=L<=50)。
以下L+1行每行一个整数坐标(Xi,Yi),庄主划的线段为(Xi,Yi)-(Xi+1,Yi+1),i=1,2,…,L。当然(Xi,Yi)必定在矩形的边界上。
最后一组数据w=h=0,标志文件结束,不需要处理。
Output
Sample Input
8
2 0
6 12
10 0
18 9
15 12
0 6
14 0
10 12
0 9
7 6
6
2 0
5 6
7 3
0 3
3 0
3 6
0 5
0 0
Sample Output
11
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
int w,h,L,i,j,ans;
struct Point{
int x,y;
}p[60];
double Cross(Point a,Point b){
return a.x*b.y-a.y*b.x;
}
int main(){
while(scanf("%d%d",&w,&h),w,h){
Point tmp,tp,tmmp,tmp1,tp1,tmmp1;
ans=1;
scanf("%d",&L);
for(i=0;i<=L;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
if(L==1){
ans=1;
}
else if(L==2){
ans=1;
}
else{
for(i=L;i>=3;i--){
for(j=i-1;j>=1;j--){
tmp.x=p[i].x-p[i-1].x;
tmp.y=p[i].y-p[i-1].y;
tp.x=p[j-1].x-p[i-1].x;
tp.y=p[j-1].y-p[i-1].y;
tmmp.x=p[j].x-p[i-1].x;
tmmp.y=p[j].y-p[i-1].y;
tmp1.x=p[j].x-p[j-1].x;
tmp1.y=p[j].y-p[j-1].y;
tp1.x=p[i-1].x-p[j-1].x;
tp1.y=p[i-1].y-p[j-1].y;
tmmp1.x=p[i].x-p[j-1].x;
tmmp1.y=p[i].y-p[j-1].y;
double c1=Cross(tmp,tp),c2=Cross(tmp,tmmp);
double c3=Cross(tmp1,tp1),c4=Cross(tmp1,tmmp1);
if( c1*c2 < 0 && c3*c4<0)
ans++;
}
}
}
printf("%d\n",ans+L);
}
return 0;
}
FZU 1015 土地划分的更多相关文章
- fzu 1015 土地划分(判断线段相交+求出交点+找规律)
链接:http://acm.fzu.edu.cn/problem.php?pid=1015 Problem 1015 土地划分 Accept: 714 Submit: 1675Time Lim ...
- FOJ Problem 1015 土地划分
Problem 1015 土地划分 Accept: 823 Submit: 1956Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- 1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...
- FZU 2137 奇异字符串 后缀树组+RMQ
题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- FZU 2112 并查集、欧拉通路
原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
随机推荐
- 未能加载文件或程序集Newtonsoft.Json, Version=4.5.0.0
1.打开 程序管理器控制台 输入 PM> install-package newtonsoft.json 2.查看bin文件中是否有 newtonsoft.json.dll文件 3.在Web. ...
- CSS小技巧-两个盒子之间的间距问题
1.水平排放的盒子,水平间距是两个margin的累加 2.垂直排放的盒子,垂直间距是合并的取最大值
- IIC协议学习笔记
"移植"的重要性:并非所有的电路都得自己设计,到了一定阶段,"移植"也是一种学习能力.--CrazyBingo 转眼间期末又到了,最近开始了所谓的期末总预习,比 ...
- canvas实现视频截图
截取视频当前播放画面,直接上源码. <body> <div class="container"> <video id="test" ...
- Docker 网络命令
docker network create docker network connect docker network ls docker network rm docker network disc ...
- HTML/XML/XPATH基础
Html超文本标记语言 网页上单击右键→查看源文件/查看源代码 Html基本结构 <html> 为文档根元素,所有元素都在内部进行 <head> ...
- 二分查找(binary search)
二分查找又叫折半查找,要查找的前提是检索结果位于已排序的列表中. 概念 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是 ...
- 浏览器未安装flash插件,js判断直接去官网安装
近期做了个活动页,里面根据需求插入了阿里云的视频,常见的浏览器都支持包括低版本的. 由于浏览器的更新换代很多版本放弃了flash的插件安装,火狐就是其中之一. 未安装flash的浏览器如果打开这个链接 ...
- Redis数据类型之List(三)
前言:list即链表,它是一个能维持数据先后顺序的列表,便于在表的两端追加和删除数据,中间位置的存取具有O(N)的时间复杂度,是一个双向链表. 一.内部原理 redis ...
- Bash的命令替换
命令替换:将命令替换为命令的输出,所有的shell支持使用反引号的方法进行命令替换.Bash支持两种形式:$(command) 和`command`命令替换是可以嵌套的,如果使用反引号的形式,在内部反 ...