• HDU 5762 Teacher Bo 鸽巢原理


      题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762

      题目描述: 问n个点对儿中有没有两个点曼哈顿距离相同、N , M <= 1e5

      解题思路: 给你的N是唬人的, 由于坐标绝对值最大距离是M, 所以曼哈顿最大距离就是2*M, 也就是说最多2*M+1次绝对会出解, 复杂度为O(M)

      代码: 

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cstring>
    #include <iterator>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <deque>
    #include <map>
    #define lson l, m, rt<<1
    #define rson m+1, r, rt<<1|1
    #define mem0(a) memset(a,0,sizeof(a))
    #define meminf(a) memset(a,-0x3f,sizeof(a))
    #define fi(n) for(i=0;i<n;i++)
    #define fj(m) for(j=0;j<m;j++)
    #define sca(x) scanf("%d",&x)
    #define ssca(x) scanf("%s",x)
    #define scalld(x) scanf("%I64d",&x)
    #define print(x) printf("%d
    ", x)
    #define printlld(x) printf("%I64d
    ",x)
    #define de printf("=======
    ")
    #define yes printf("YES
    ")
    #define no printf("NO
    ")
    typedef long long ll;
    using namespace std;
    
    const int maxn = 1e5+100;
    int x[maxn];
    int y[maxn];
    int vis[2*maxn];
    
    int main() {
        int t;
        sca(t);
        while( t-- ) {
            int n, m;
            mem0(vis);
            sca(n);
            sca(m);
            for( int i = 1; i <= n; i++ ) {
                sca(x[i]), sca(y[i]);
            }
            int flag = 0;
            for( int i = 1; i < n; i++ ) {
                for( int j = i+1; j <= n; j++ ) {
                    int dis = abs(x[i]-x[j])+abs(y[i]-y[j]);
                    if( vis[dis] ) {
                        flag = 1;
                        break;
                    }
                    else vis[dis] = 1;
                }
                if( flag ) break;
            }
            if( flag ) printf( "YES
    " );
            else printf( "NO
    " );
        }
        return 0;
    }
    View Code

      思考: 一开始看题没明白题目的意思.....还想求最近点对儿和最远点对儿.......再用鸽巢.......mdzz

  • 相关阅读:
    006_linux驱动之_ioremap函数使用
    004_linux驱动之_class_create创建一个设备类
    003_linux驱动之_file_operations函数
    002_linux驱动之_register_chrdev注册字符设备
    001_linux驱动之_驱动的加载和卸载
    007_linuxC++之_构造函数的初级应用
    006_linuxC++之_引用
    005_linuxC++之_指针的引入
    004_linuxC++之_函数的重载
    003_linuxC++之_namespace使用
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/7419924.html
Copyright © 2020-2023  润新知