Problem B: Saskatchewan

Problem B: Saskatchewan

时间: 10ms        内存:128M

描述:

Problem B: Saskatchewan

The province of Saskatchewan is surveyed in sections. A section is a square mile of land. Grid roads delimit sections; there is one north-south and one east-west road exactly every mile. (Complications arise because of the curvature of the earth but you can disregard these and assume that the province is a plane.) The provincial border is a polygon whose vertices correspond to the intersections of grid roads. However, the edges do not necessarily follow grid roads; some sections are cut by the border. Your job is to compute how many sections are completely within a province like Saskatchewan.

Standard input contains a series of no more than 100 coordinate pairs, one pair per line. These coordinates give the vertices of the perimeter of the province; the border is formed by connecting them in order. All coordinates are in the first quadrant; they range from 0 to 100,000.

Your output should be a single integer: the number of sections (i.e. unit squares with corners at integer coordinates) fully contained within the province.

输入:

输出:

示例输入:

0 0
0 100000
99999 100000
100000 0

示例输出:

9999900000

提示:

参考答案(内存最优[756]):

#include <stdio.h>
#include <stdlib.h>

char in[5000];
int i,j,k,n,next,prev,jolly;

main(){
   while (1 == scanf("%d",&n)){
      jolly = 1;
      for (i=1;i<n;i++) in[i] = 0;
      scanf("%d",&prev);
      for (i=1;i<n;i++) {
         scanf("%d",&next);
         j = abs(next-prev);
         if (j < 1 || j >= n || in[j]++) jolly = 0;
         prev = next;
      }
      if (jolly) printf("Jolly\n");else printf("Not jolly\n");
   }
}

参考答案(时间最优[4]):

#include <stdio.h>
#include <stdlib.h>

char in[5000];
int i,j,k,n,next,prev,jolly;

main(){
   while (1 == scanf("%d",&n)){
      jolly = 1;
      for (i=1;i<n;i++) in[i] = 0;
      scanf("%d",&prev);
      for (i=1;i<n;i++) {
         scanf("%d",&next);
         j = abs(next-prev);
         if (j < 1 || j >= n || in[j]++) jolly = 0;
         prev = next;
      }
      if (jolly) printf("Jolly\n");else printf("Not jolly\n");
   }
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注