POJ 1265 pick公式

这题用到了pick公式,area=on/2+in-1 on为在多边形边上的点数,in为在多边形内的点数。叉积求多边形面积,gcd(x,y)为边上的点数,x为相邻两点x差的绝对值,y同理。根据公式可求在多边形内的点数。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
int ab(int a)
{
    return a>=0?a:-a;
}
int main()
{
    int n,t,s=0;
    scanf("%d",&t);
    while(t--)
    {
        if(s)
            printf("\n");
        scanf("%d",&n);
        int ep=0,area=0,in,x,y,x1=0,y1=0,x2=0,y2=0;
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&x,&y);
            x1+=x,y1+=y;
            area+=x1*y2-y1*x2;
            x2=x1,y2=y1;
            ep+=gcd(ab(x),ab(y));
        }
        area=ab(area);
        in=area/2-ep/2+1;
        printf("Scenario #%d:\n%d %d %.1f\n",++s,in,ep,area/2.0);
    }
    return 0;
}
时间: 2024-09-10 02:53:44

POJ 1265 pick公式的相关文章

POJ 2954 pick公式

这题用到了pick公式,area=on/2+in-1 on为在多边形边上的点数,in为在多边形内的点数.叉积求多边形面积,gcd(x,y)为边上的点数,x为相邻两点x差的绝对值,y同理.根据公式可求在多边形内的点数. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int gcd(int a,int b) { if(

POJ 1265 Area (计算几何)(Pick定理)

Area:http://poj.org/problem?id=1265 计算几何)(Pick定理)-poj1265"> 大意:每次给你一个点的横纵坐标变化值,求有多少点在多边形上,有多少点在多边形内,和多边形的面积. 思路:Pick定理. 一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Progr

POJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

POJ 3371 Flesch Reading Ease (模拟题)

Flesch Reading Ease:http://poj.org/problem?id=3371 题目很水,就是看懂题就行. 题意: 给出一篇规范的文章,求其 句子数.单词数 和 音节数把这3个值代入题目给出的公式,输出其结果,保留2位小数. 标记单词分隔符: 逗号(,) 和 空格( ) 句子分隔符:句号(.) 问号(?) 冒号(:) 分号(;) 感叹号(!) 音节处理要求: (1)当单词总长度<=3时,音节数无条件+1 (2) 当单词总长度>3时,单词中每出现一个元音字母(a.e.i.o

POJ 2653 Pick-up sticks:计算几何 求线段交点

POJ 2653:http://poj.org/problem?id=2653 题意:题意很简单,就是在地上按顺序撒一对木棒,看最后有多少是被压住的,输出没有被压住的木棒的序号.有点坑的就是没说清楚木棒怎么算压住,也不知道是不是规范相交...我就判断了一下包括端点重合跟部分相交的. 思路:一开始我想的是从后往前遍历,找到每一条边,看他是不是压到之前的边了,如果压到了,就把之前的变标记一下,最后统计没被标记过的,但是TLE了...就只能从前面开始找,遍历每一条边是否被后面的压过了,压过了就直接br

poj 1639 Picnic Planning:最小度限制生成树

链接: http://poj.org/problem?id=1639 题目: Picnic Planning Time Limit: 5000MS     Memory Limit: 10000K Total Submissions: 7780     Accepted: 2726 Description The Contortion Brothers are a famous set of circus clowns, known worldwide for their incredible

poj分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

poj 1845 Sumdiv

点击打开链接poj 1845 思路:数学+二分 分析: 1 题目要求的是A^B的所有因子的和对9901取模 2 先看几个数学定理 1:整数的唯一分解定理(如果A本身就是素数的话,那么本身就是分解式) 任意正整数都有且只有一种方式写出其素因子的乘积表达式. A = (p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)   其中pi均为素数; A^B = p1^(k1*B) * p2^(k2*B)*...* pn^(kn*B);   2:约数和公式 对于已经分解的整数A = (p

poj 1745 Divisibility

点击打开链接poj 1745 思路: dp 分析: 1 又是一道看了题解还不懂怎么个回事的题,然后各种YY之后有点感觉 2 题目要求的是在n个数中间插入n-1个的+或-使得结果能否被k整除 3 看一个数学的公式(a+b)%k = a%k+b%k,按照网上的题解dp[i][j]表示的是前i个数运算能否得到模为j,如果可以则dp[i][j] = true,否则为false 4 那么如果dp[i-1][j] = true,则可以知道dp[i][(j+arr[i])%k]] = true , dp[i]