zoukankan      html  css  js  c++  java
  • UVALive 5984

    题目链接:Save the Students!

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    using namespace std;
    
    bool vis[205][205];   // 所有数据保证在1到50.那么坐标在-50到100之间。所以。哈希到50到200之间。开始开的200*200的。WA。
    
    double dis(double x1, double y1, double x2, double y2)  // 两点间距离。
    {
        // cout << x1 << "==" << y1 << "==" << x2<< "==" << y2 << "==" << endl;
        double xx = (x2-x1)*(x2-x1);
        double yy = (y2-y1)*(y2-y1);
        double ans = xx+yy+0.0;
        return ans;
    }
    
    int circle(int a, int b, int r)  //是否在圆内。
    {
        int cnt = 0;
        for (int i=a-r; i<=a+r; ++i)
        {
            for (int j=b-r; j<=b+r; ++j)
            {
                if (!vis[i+100][j+100])
                {
                    if (dis(i, j, a, b) <= r*r)
                    {
                        cnt++;
                        vis[i+100][j+100] = 1;
                    }
                }
            }
        }
        return cnt;
    }
    
    double area(int x1, int y1, int x2, int y2, int x3, int y3) // 三角形面积。
    {
        double temp = (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1);
        temp /= 2.0;
        if (temp < 0) temp = -temp;
        return temp;
    }
    
    int triangle(int x1, int y1, int x2, int y2, int x3, int y3) //是否在三角形内。
    {
        int cnt = 0;
        int minx = min(x1, min(x2, x3));
        int maxx = max(x1, max(x2, x3));
        int miny = min(y1, min(y2, y3));
        int maxy = max(y1, max(y2, y3));
    
        for (int i=minx; i<=maxx; ++i)
        {
            for (int j=miny; j<=maxy; ++j)
            {
                if (!vis[i+100][j+100])
                {
                    double s1 = area(i, j, x1, y1, x2, y2);
                    double s2 = area(i, j, x1, y1, x3, y3);
                    double s3 = area(i, j, x2, y2, x3, y3);
                    double s = area(x1, y1, x2, y2, x3, y3);
                    if (s1 + s2 + s3 == s)
                    {
                        cnt++;
                        vis[i+100][j+100] = 1;
                    }
                }
            }
        }
        return cnt;
    }
    
    int square(int x1, int y1, int l) //正方形直接判断是不是已经被覆盖了。就可以。开始用了一个巨蠢的用距离判断点是不是在正方形内。。呵呵。。。。
    {
        int cnt = 0;
        for (int i=x1; i<=x1+l; ++i)
        {
            for (int j=y1; j<=y1+l; ++j)
            {
                if (!vis[i+100][j+100])
                {
                    cnt++;
                    vis[i+100][j+100] = 1;
                }
            }
        }
        return cnt;
    }
    
    int main()
    {
        int t, n;
        int x1, x2, x3, x4, x5, x6;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n);
            memset(vis, 0, sizeof(vis));
            int ans = 0;
            for (int i=0; i<n; ++i)
            {
                char temp;
                getchar();
                scanf("%c", &temp);
                if (temp == 'C')
                {
                    scanf("%d%d%d", &x1, &x2, &x3);
                    ans += circle(x1, x2, x3);
                }
                else if (temp == 'S')
                {
                    scanf("%d%d%d", &x1, &x2, &x3);
                    ans += square(x1, x2, x3);
                }
                else if (temp == 'T')
                {
                    scanf("%d%d%d%d%d%d", &x1, &x2, &x3, &x4, &x5, &x6);
                    ans += triangle(x1, x2, x3, x4, x5, x6);
                }
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    C#中静态与非静态方法比较
    Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )
    网络协议概述:物理层、连接层、网络层、传输层、应用层详解
    phpstorm xdebug配置
    eclipse修改内存大小
    Session机制详解
    java把html标签字符转普通字符(反转换成html标签)(摘抄)
    JAVA调用WCF
    RabbitMQ入门与使用篇
    大话程序猿眼里的高并发
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4749117.html
Copyright © 2011-2022 走看看