zoukankan      html  css  js  c++  java
  • 可见矩形

    题目描述

    给定平面上n个互不相交(指公共面积为零)的正方形,它们的顶点坐标均为整数。设坐标原点为O(0, 0)。对于任一正方形R,如果可以找到R的边上2个不同的点A和B,使三角形OAB的内部与其他正方形无公共点,则称正方形R是从O点可见的正方形。

    对于给定的n个互不相交的正方形,计算从坐标原点O可见的正方形个数。

    输入格式

    输入文件的第一行是正方形个数n(1≤n≤1000)。

    接下来n行中,每行有3个表示正方形的整数X,Y,L。其中,X和Y表示正方形的左下角顶点坐标,L表示边长,1≤X, Y, L≤10000。

    输出格式

    输出文件仅有一行包含一个整数,表示从坐标原点O可见的正方形个数。

    输入输出样例

    输入 #1
    3
    2 6 4
    1 4 1
    2 4 1
    输出 #1
    3

    分析:
    本题不难做,就是用斜率来代替即可,只要学过初中数学应该都会,但是目测我的代码依旧10分,求大佬指教。

    CODE:
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int M=20005;
    int n,ans;
    struct node{
        int x,y,l;
    }a[M];
    struct node1{
        double k1,k2;
    }b[M];
    int get(){
        int res=0,f=1;
        char c=getchar();
        while (c>'9'||c<'0') {
            if (c=='-') f=-1;
            c=getchar();
        }
        while (c<='9'&&c>='0'){
            res=(res<<3)+(res<<1)+c-'0';
            c=getchar();
        }
        return res*f;
    }
    bool cmp(node xx,node yy){
        if (xx.x==yy.x) return xx.y<yy.y;
        else return xx.x<yy.x;
    }
    int main(){
        n=get();
        for (int i=1;i<=n;i++) a[i].x=get(),a[i].y=get(),a[i].l=get();
        sort(a+1,a+n+1,cmp);
        for (int i=1;i<=n;i++){
            b[i].k1=(a[i].y+a[i].l)*1.0/a[i].x;
            b[i].k2=a[i].y*1.0/(a[i].x+a[i].l);
            cout<<a[i].x<<" "<<a[i].y<<" "<<a[i].l<<endl;
            cout<<b[i].k1<<" "<<b[i].k2<<endl;
        }
        ans=n;
        for (int i=1;i<=n;i++){
            int now1=1<<10,now2=1<<10;
            for (int j=i-1;j>=1;j--){
                if (b[i].k1<b[j].k1) now1=0;
                if (b[i].k2>b[j].k2) now2=0;
            }
            if (!(now1+now2)) ans--;
        }
        cout<<ans<<endl;
        return 0;
    }
    
    
    
     
  • 相关阅读:
    [HAOI2015]按位或
    【bzoj 4675】 点对游戏
    [WC2013]糖果公园
    [国家集训队]数颜色 / 维护队列
    【bzoj 3252】攻略
    [ZJOI2016]小星星
    hdu-1712 ACboy needs your help---分组背包
    hdu-2844&&POJ-1742 Coins---多重背包
    UVA-147 Dollars---完全背包+打表
    hdu-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活---多重背包
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11503735.html
Copyright © 2011-2022 走看看