zoukankan      html  css  js  c++  java
  • HDU 5762 Teacher Bo (暴力)

    Teacher Bo

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5762

    Description

    Teacher BoBo is a geography teacher in the school.One day in his class,he marked N points in the map,the i-th point is at (Xi,Yi).He wonders,whether there is a tetrad (A,B,C,D)(A < B,C < D,A≠CorB≠D) such that the manhattan distance between A and B is equal to the manhattan distance between C and D.

    If there exists such tetrad,print "YES",else print "NO".

    Input

    First line, an integer T. There are T test cases.(T≤50)

    In each test case,the first line contains two intergers, N, M, means the number of points and the range of the coordinates.(N,M≤105).

    Next N lines, the i-th line shows the coordinate of the i-th point.(Xi,Yi)(0≤Xi,Yi≤M).

    Output

    T lines, each line is "YES" or "NO".

    Sample Input

    2
    3 10
    1 1
    2 2
    3 3
    4 10
    8 8
    2 3
    3 3
    4 4

    Sample Output

    YES
    NO

    Source

    2016 Multi-University Training Contest 3


    ##题意: 给出平面上的N个点,求是否一个四元组(A,B,C,D)满足AB之间的曼哈顿距离等于CD之间距离. 条件(A
    ##题解: 这个题让我懵比的两个小时... 一开始先把曼哈顿距离想成了abs(dx+dy),然后可以只考虑每个点的坐标和,从而误把题目转化为求一个数组中是否有两对数的和相等. 由于规模是1e5,然后一直在想O(nlogn)的算法...
    首先,曼哈顿距离的正确定义是abs(dx)+abs(dy). 其次,题目的数据规模确实不能跑O(n^2)的算法,但是题目限制了坐标的范围为[0,1e5], 这意味着任意两点的曼哈顿距离只可能有2e5种可能,暴力最多只会判断2e5个组合,所以不会超时. 所以直接暴力判断所有组合即可,当出现重复的距离时停止判断(先离线数据).
    这个题懵比这么久真的是非常不应该,所以以后卡题的时候,一定要重新读题和尝试转换思考角度.

    ##代码: ``` cpp #include #include #include #include #include #include #include #include #include #define LL long long #define eps 1e-8 #define maxn 251000 #define mod 100000007 #define inf 0x3f3f3f3f #define IN freopen("in.txt","r",stdin); using namespace std;

    int n,m;
    struct point {
    int x,y;
    }p[maxn];
    bool dis[maxn];

    int get_ans(point a, point b) {
    return abs(a.x-b.x) + abs(a.y-b.y);
    }

    int main(int argc, char const *argv[])
    {
    //IN;

    int t; cin >> t;
    while(t--)
    {
        memset(dis, 0, sizeof(dis));
        cin >> n >> m;
    
        int flag = 0;
    
        for(int i=1; i<=n; i++) {
            int x,y; scanf("%d %d", &x,&y);
            p[i].x=x; p[i].y=y;
        }
    
        for(int i=1; i<=n; i++) {
            for(int j=1; j<i; j++) {
                int tmp = get_ans(p[i],p[j]);
                if(dis[tmp]) {
                    flag = 1;
                    break;
                }
                dis[tmp] = 1;
            }
            if(flag) break;
        }
    
        if(flag) puts("YES");
        else puts("NO");
    }
    
    return 0;
    

    }

  • 相关阅读:
    网络多线程 ---实现网络负载图片
    optimizer for eclipse--Eclipse优化,让你的Eclipse快来飞!
    ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第二章 ASM instance(1)
    IOS 开展 分别制定了iphone 和 ipad 好? 或开发一个 Universal好?
    DevExpress VCL 2014.1.2 for C++BUILDER XE6
    swift http请求返回json数据和分析
    Spark里面的任务调度:离SparkContext开始
    ftk学习记录(一个进度条文章)
    Appium Android Bootstrap控制源代码的分析AndroidElement
    别忽视了业绩比较基准
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5709156.html
Copyright © 2011-2022 走看看