zoukankan      html  css  js  c++  java
  • SPOJ UMR 10A 计算几何

    DES:顺时针给出构成凸多边形的点。然后有Q个询问任意给出两个点的编号,询问由这两个点的连线将多边形分成的两部分面积较小的部分面积大小。

    比赛时直接每次连线后求多边形求面积超时了。正确解法是求出利用叉积球三角形面积不断求和求出多边形总面积的同时,保留多边形的前缀和。当任意两点连线时,只要用前缀和想减再减去一个三角形的面积即可。

    然而...我不理解的是关于q的那个循环...for就是超时...while就是AC...坐标明明是interger...int就WA...double就AC...

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    using namespace std;
    
    struct Point
    {
        double x, y;
    } p[50010];
    
    double areaa(Point p0, Point p1, Point p2)  //计算以这三个点为顶点的三角形面积
    {
        double temp = (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
        temp /= 2.0;
        return fabs(temp);
    }
    
    double area[50010];  // 存储多边形的前缀多边形的面积。
    
    int main()
    {
        int n, q;
        int xx, yy;
        while(~scanf("%d%d", &n, &q))
        {
            for (int i=0; i<n; ++i)
            {
                scanf("%lf%lf", &p[i].x, &p[i].y);
            }
            double tot_area = 0;
            area[0] = 0;
            area[1] = 0;
            for (int i=1; i<n-1; ++i)
            {
                tot_area += areaa(p[0], p[i], p[i+1]);
                area[i+1] = tot_area;
            }
            int t1, t2;
            double ans;
            double temp_area;
    
            while(q--)
            {
                scanf("%d%d", &t1, &t2);
                if (t2 > t1) swap(t1, t2);  // 保证t1>t2
                temp_area = area[t1]-area[t2]-areaa(p[0], p[t1], p[t2]);
                if (temp_area < tot_area-temp_area)
                    printf("%.1lf
    ", temp_area);
                else printf("%.1lf
    ", tot_area-temp_area);
            }
        }
        return 0;
    }
    L哦哦K
  • 相关阅读:
    排序算法(三人组加上快排)
    property函数的使用
    nginx
    列表中相同key的字典相加
    python的数据结构
    循环的应用
    JPA使用指南 javax.persistence的注解配置讲解
    Spring中使用@Value读取porperties文件中的属性值方法总结及注意事项
    java中Properties类及读取properties中属性值
    jackson中@JsonProperty、@JsonIgnore等常用注解总结
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4691447.html
Copyright © 2011-2022 走看看