poj 1265&&poj 2954(Pick定理)

本文介绍了如何使用Pick定理来计算由一系列整点构成的简单多边形的面积、内部整点数量及边界上整点数量。通过具体实例演示了算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Area
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 5811 Accepted: 2589

Description

Being well known for its highly innovative products, Merck would definitely be a good target for industrial espionage. To protect its brand-new research and development facility the company has installed the latest system of surveillance robots patrolling the area. These robots move along the walls of the facility and report suspicious observations to the central security office. The only flaw in the system a competitor抯 agent could find is the fact that the robots radio their movements unencrypted. Not being able to find out more, the agent wants to use that information to calculate the exact size of the area occupied by the new facility. It is public knowledge that all the corners of the building are situated on a rectangular grid and that only straight walls are used. Figure 1 shows the course of a robot around an example area.


Figure 1: Example area.

You are hired to write a program that calculates the area occupied by the new facility from the movements of a robot along its walls. You can assume that this area is a polygon with corners on a rectangular grid. However, your boss insists that you use a formula he is so proud to have found somewhere. The formula relates the number I of grid points inside the polygon, the number E of grid points on the edges, and the total area A of the polygon. Unfortunately, you have lost the sheet on which he had written down that simple formula for you, so your first task is to find the formula yourself.

Input

The first line contains the number of scenarios.
For each scenario, you are given the number m, 3 <= m < 100, of movements of the robot in the first line. The following m lines contain pairs 揹x dy�of integers, separated by a single blank, satisfying .-100 <= dx, dy <= 100 and (dx, dy) != (0, 0). Such a pair means that the robot moves on to a grid point dx units to the right and dy units upwards on the grid (with respect to the current position). You can assume that the curve along which the robot moves is closed and that it does not intersect or even touch itself except for the start and end points. The robot moves anti-clockwise around the building, so the area to be calculated lies to the left of the curve. It is known in advance that the whole polygon would fit into a square on the grid with a side length of 100 units.

Output

The output for every scenario begins with a line containing 揝cenario #i:� where i is the number of the scenario starting at 1. Then print a single line containing I, E, and A, the area A rounded to one digit after the decimal point. Separate the three numbers by two single blanks. Terminate the output for the scenario with a blank line.

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

题意:一个多边形从某个点出发(假设从0,0出发),每次有一个增量(dx,dy)!=(0,0) 经过n次之后又回到了原点
组成了一个简单多边形.问此时多边形内部的整点的数量,多边形边上的整点的数量,多边形的面积.

Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1,其中a表示多边形内部的整点数,b表示
多边形边界上的整点数,s表示多边形的面积。(ps:整点是x,y坐标都是整数)
每条边上的格点数(顶点只算终点) = gcd(abs(x2-x1),abs(y2-y1))
///题意:一个多边形从某个点出发(假设从0,0出发),每次有一个增量(dx,dy)!=(0,0) 经过n次之后又回到了原点
///组成了一个简单多边形.问此时多边形内部的整点的数量,多边形边上的整点的数量,多边形的面积.
///Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1,其中a表示多边形内部的整点数,b表示
///多边形边界上的整点数,s表示多边形的面积。(ps:整点是x,y坐标都是整数)
///每条边上的格点数 = gcd(abs(x2-x1),abs(y2-y1))
#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
const int N =105;
struct Point {
    int x,y;
}p[N];
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int cross(Point a,Point b,Point c){
    return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
int main()
{
    int tcase;
    scanf("%d",&tcase);
    int k = 1;
    while(tcase--){
        int n;
        scanf("%d",&n);
        p[0].x = 0,p[0].y = 0;
        int On=0,In=0;
        double area=0;
        for(int i=1;i<=n;i++){
            int dx,dy;
            scanf("%d%d",&dx,&dy);
            p[i].x= p[i-1].x+dx;
            p[i].y=p[i-1].y+dy;
            On+=gcd(abs(dx),abs(dy));
        }
        for(int i=1;i<n-1;i++){
            area+=cross(p[i],p[i+1],p[0])/2.0;
        }
        In = (int)(area+1-On/2);
        printf("Scenario #%d:\n%d %d %.1lf\n\n",k++,In,On,area);
    }
    return 0;
}

 poj 2954

http://acm.pku.edu.cn/JudgeOnline/problem?id=2954

///题意:完全包含在三角形内的整点有多少
#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct Point {
    int x,y;
}p1,p2,p3;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int cross(Point a,Point b,Point c){
    return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
int main()
{
    while(scanf("%d%d%d%d%d%d",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y)!=EOF){
        if(p1.x==0&&p1.y==0&&p2.x==0&&p2.y==0&&p3.x==0&&p3.y==0) break;
        double area = fabs(cross(p2,p3,p1)/2.0);

        int On = gcd(abs(p2.x-p1.x),abs(p2.y-p1.y))+gcd(abs(p3.x-p2.x),abs(p3.y-p2.y))+gcd(abs(p3.x-p1.x),abs(p3.y-p1.y));
        printf("%d\n",(int)(area+1-On/2));
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/liyinggang/p/5452954.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值