CodeForces - 659D 思維題

小明從小就喜歡騎自行車,自行車環湖騎行大賽馬上開始了,小明當然也參加了。爲了能取得更好地成績,小明想知道在哪些地方需要格外的注意,以防掉湖。
現在已知該湖爲n邊形且形狀均由直線和直角組成(可以參照樣例解釋),小明從起始點沿着環湖路線順時針騎到終點,求小明可能由於忘記拐彎而導致掉湖的次數。

Input

第一行一個整數n(4<=n<=1000) 
下面n+1行每行包含兩個數,爲每個直角處的座標,第一個點爲起始點,相鄰兩行的座標構成一條直線,即環湖路線,最後一個點與第一個點重合即終止點。

Output

一個整數。(可能由於忘記拐彎而掉進湖的次數)

Examples

輸入

6
0 0
0 1
1 1
1 2
2 2
2 0
0 0

輸出

1

輸入

16
1 1
1 5
3 5
3 7
2 7
2 9
6 9
6 7
5 7
5 3
4 3
4 4
3 4
3 2
5 2
5 1
1 1

輸出

6

Note

第一個實例如下:

小明在(1,1)處可能由於忘記拐彎而掉進湖中,答案爲1

 

本題行走爲順時針,兩條線之間爲直角,可以發現只有當自行車向左走時,纔有掉進湖中的可能。

代碼如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int f;
int main(){
	int n,a,b,c,d;
	scanf("%d",&n);
	scanf("%d %d %d %d",&a,&b,&c,&d);
	if(a>c)f=4;
	if(a<c)f=2;
	if(b<d)f=1;
	if(b>d)f=3;
	n--;
	a=c;b=d;
	int ans=0;
	while(n--){
		scanf("%d %d",&c,&d);
		if(f==1){
			if(a>c){
				f=4;ans++;	
			}else f=2;
		}else if(f==2){
			if(b<d){
				f=1;ans++;
			}else f=3;
		}else if(f==3){
			if(a<c){
				f=2;ans++;
			}else f=4;
		}else{
			if(b>d){
				f=3,ans++;
			}else f=1;
		}
		a=c;b=d;
	}
	printf("%d\n",ans);
	return 0;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章