zoukankan      html  css  js  c++  java
  • poj 1265 Area(pick 定理)

    其实完全没想做这题的,因为不想这个时候在花些时间学习新的方法,但是打开了这道题就想把它做出来,像是一种本能吧。以前从没听过pick 定理,更何谈用它做题,所以只能上网搜了一些关于它的讲解,发现其实很简单,就是一个公式:

    Pick 定理   设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则   N+1/2L-1=S.

    但往往越是简单的公式,推导过程越是复杂。看了一下维基百科上的证明,感觉不是很详细,但是他下面有给出的外部链接,其中有一篇全是繁体字的,偶然搜到一篇博客,上面有这篇文章的简体翻译,简要看了一下,没细研究,留下链接,以后有时间慢慢专研吧。
    http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_1/page4.html&hl=zh-CN&ie=UTF8&sl=zh-TW&tl=zh-CN

    恩,接下来说一下1265题,题目不是给出m的点,而是给出每个点在

    x轴和y轴的距离,也就是每次都要加上求一个点的坐标才是它的自己的坐标,刚开始读题的时候没弄清楚,WA了两次,然后就是套模板了,

    给出代码:

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    struct node
    {
        int x;
        int y;
    }p[105];
    
    int edge , inside ;
    double  s ;
    
    int gcd ( int a , int b )
    {
        if ( b == 0 )
        return a;
        else return gcd ( b , a%b );
    }
    
    int edgenum(int n )
    {
         int i,ret=0;
         for(i = 1 ; i <= n ; i++)
              ret+=gcd(abs(p[i].x-p[(i+1)%n].x),abs(p[i].y-p[(i+1)%n].y));
         return ret;
    }
    
    int area( int n )
    {
        int i;
        s=0;
        for(i = 1 ; i <= n ; i++) s+=p[(i+1)%n].y*(p[i].x-p[(i+2)%n].x);
        return (fabs( s )- edge )/2 +1;
    }
    
    int main()
    {
        int cas , i , j , n , x , y ;
    
        scanf ( "%d" , &cas );
        for ( j = 1 ; j <= cas ; j++ )
        {
            scanf ( "%d", &n );
            x = y = 0 ;
            p[0].x = p[0].y = 0;
            for ( i = 1 ; i <= n ; i++)
            {
                scanf ( "%d%d" , &x , &y);
                p[i].x = p[i-1].x + x;
                p[i].y = p[i-1].y + y;
            }
            edge = edgenum ( n );
            inside = area ( n );
            printf ( "Scenario #%d:\n" , j );
            printf ( "%d %d %.1lf\n\n" , inside , edge , fabs(s)/2.0 );
        }
        return 0;
    }
  • 相关阅读:
    .net core
    web api对接小程序基本签名认证
    微信小程序主要开发语言
    C# 用Singleton类构建多线程单例模式
    web api与mvc的区别
    sql 简单分页查询(ror_number() over)
    sql查询当前数据库的所有表名
    C# 身份证号码15位和18位验证
    C# 人民币大写金额转换
    编写类-用户类
  • 原文地址:https://www.cnblogs.com/misty1/p/2490655.html
Copyright © 2011-2022 走看看