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

18 12
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

18
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 土地划分的更多相关文章

  1. fzu 1015 土地划分(判断线段相交+求出交点+找规律)

    链接:http://acm.fzu.edu.cn/problem.php?pid=1015  Problem 1015 土地划分 Accept: 714    Submit: 1675Time Lim ...

  2. FOJ Problem 1015 土地划分

    Problem 1015 土地划分 Accept: 823    Submit: 1956Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  3. 1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...

  4. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

  5. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  6. ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】

     FZU 2105  Digits Count Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  7. FZU 2112 并查集、欧拉通路

    原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...

  8. ACM: FZU 2107 Hua Rong Dao - DFS - 暴力

    FZU 2107 Hua Rong Dao Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  9. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

随机推荐

  1. 关于QT按键信号槽的总结(原创)

    QT界面按钮一般是必填的: 每个按钮都要 Go to slot 下面有几个都是常用的,先说一下 clicked:pressed:releaed的区别 字面意思看:click是点击一下,pressed是 ...

  2. C#打开php链接传参然后接收返回值

    php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate'] ...

  3. Dorado7与@ManyToMany的矛盾分析

    在Dorado7开发时,通过UpdateAction提交数据,默认只会提交DataSet中DirtyTree,这样如果子对象数据未发生修改时是不会提交的,后台拿到的子对象为空.如果两对象之间,通过JP ...

  4. 教育行业app开发新契机,在线教育要从B端出发

    近几年移动互联网教育风生水起,在运营模式上的开拓也各不相同,随着移动互联网进入下半场,好未来.新东方.猿题库.学霸君等,都在加速三四线地区布局,以及教育行业app开发和升级. 在移动互联网下半场,用户 ...

  5. inux中shell变量$#,$@,$0,$1,$2的含义

    转自:http://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量 ...

  6. Targeted Learning R Packages for Causal Inference and Machine Learning(转)

    Targeted learning methods build machine-learning-based estimators of parameters defined as features ...

  7. cursor 属性

    鼠标 样式 default 默认光标(通常是一个箭头) auto 默认.浏览器设置的光标. crosshair 光标呈现为十字线. pointer 光标呈现为指示链接的指针(一只手) move 此光标 ...

  8. Centos 执行shell命令返回127错误

    shell脚本功能:连接mysql,自动创建数据库,脚本如下 mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASSWORD --default-character ...

  9. Vue 爬坑之路(四)—— 与 Vuex 的第一次接触

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  10. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...