zoukankan      html  css  js  c++  java
  • POJ 1265 Area

    POJ_1265

        这个题目的核心是Pick定理:对给定顶点坐标均是整点的简单多边形,其面积A和内部格点数目i、边上格点数目b满足:A=i+b/2-1。

        因此我们可以先求出多边形的面积以及边上的格点数,进而可以得到多边形内部的格点数。边上的格点数可以通过求|dx|和|dy|的最大公约数得到。

    #include<stdio.h>
    #include<string.h>
    long long int ans, din, don;
    int abs(int x)
    {
    return x < 0 ? -x : x;
    }
    long long int det(int x1, int y1, int x2, int y2)
    {
    return (long long int )x1 * y2 - (long long int)x2 * y1;
    }
    int gcd(int x, int y)
    {
    return y == 0 ? x : gcd(y, x % y);
    }
    void solve()
    {
    int i, j, k, n, d, dx, dy, x, y, px, py;
    ans = don = dx = dy = px = py = 0;
    scanf("%d", &n);
    for(i = 0; i < n; i ++)
    {
    scanf("%d%d", &dx, &dy);
    x = px + dx, y = py + dy;
    don += gcd(abs(dx), abs(dy));
    ans += det(px, py, x, y);
    px = x, py = y;
    }
    ans = ans < 0 ? -ans : ans;
    din = (ans - don) / 2 + 1;
    if(ans % 2)
    printf("%lld %lld %lld.5\n", din, don, ans / 2);
    else
    printf("%lld %lld %lld.0\n", din, don, ans / 2);
    }
    int main()
    {
    int t, tt;
    scanf("%d", &t);
    for(tt = 0; tt < t; tt ++)
    {
    printf("Scenario #%d:\n", tt + 1);
    solve();
    printf("\n");
    }
    return 0;
    }


  • 相关阅读:
    linux
    linux
    linux
    linux
    linux
    linux
    linux
    idea插件篇之java内存分析工具(JProfiler)
    Jmeter(线程组+http请求+汇总报告)
    ZK客户端zkClient.bat
  • 原文地址:https://www.cnblogs.com/staginner/p/2354025.html
Copyright © 2011-2022 走看看