标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 5666 | Accepted: 2533 |
Description
Input
Output
Sample Input
2 4 1 0 0 1 -1 0 0 -1 7 5 0 1 3 -2 2 -1 0 0 -3 -3 1 0 -3
Sample Output
Scenario #1: 0 4 1.0 Scenario #2: 12 16 19.0
Source
【思路】
Pick定理
同上题。
【代码】
1 #include<cstdio> 2 using namespace std; 3 4 struct Pt { 5 int x,y; 6 Pt(int x=0,int y=0) :x(x),y(y){}; 7 }; 8 Pt p[110]; 9 typedef Pt vec; 10 vec operator - (Pt a,Pt b) { return vec(a.x-b.x,a.y-b.y); } 11 12 int abs(int x) { return x<0? -x:x; } 13 int gcd(int a,int b) { return b==0? a:gcd(b,a%b); } 14 int cross(Pt a,Pt b) { return a.x*b.y-a.y*b.x; } 15 int calc(Pt a,Pt b) { return gcd(abs(a.x-b.x),abs(a.y-b.y)); } 16 17 int n; 18 int main() { 19 int T,kase=0; 20 scanf("%d",&T); 21 while(T--) { 22 scanf("%d",&n); 23 n++; 24 p[0]=Pt(0,0); 25 for(int i=1;i<n;i++) { 26 scanf("%d%d",&p[i].x,&p[i].y); 27 p[i].x+=p[i-1].x , p[i].y+=p[i-1].y; 28 } 29 int S=0,b=0; 30 for(int i=1;i<n-1;i++) { 31 S += cross(p[i],p[i+1]); 32 b += calc(p[i],p[i+1]); 33 } 34 b += calc(p[n-1],p[0])+calc(p[0],p[1]); 35 printf("Scenario #%d:\n%d %d %.1f\n\n",++kase,(S-b+2)/2,b,0.5*S); 36 } 37 return 0; 38 }
标签:
原文地址:http://www.cnblogs.com/lidaxin/p/5182320.html