HDU 5762 Teacher Bo

来源:互联网 发布:icon mac 驱动 编辑:程序博客网 时间:2024/05/30 22:52

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

题意:给你N个点,任意4个点(A,B,C,D) 规则A < B,C < D 要求A!=C or B!=D,求存不存在 L(A,B)=L(C,D)
L代表曼哈顿距离.

个人感想:
很水的一道题,,然而我也没想出来,,感觉脑筋有点塞啊.今天全程打酱油靠队友…膜膜膜膜膜%%%%orz..,
然后是一个曼哈顿, 然后我没什么思路,后来队友说试试n^2的算法吧,或许能过,..因为只要从当前i的点求出L(j,i)(j < i)的点进行曼哈顿,判断数组里面有没有存在同样的距离的,有就输出YES,否则就NO.我觉得可能会超时,可是队友发现,如果这样,最差的情况只要 O(2*10^5)就可以求出答案,因为不重复的最长的曼哈顿(2 * 10^5)次,一旦存在重复,那肯定输出YES..他发现了这个规律,直接说绝对不会超时,然后AC.. 我领悟了一个道理!!暴力很重要.题的范围更重要!!!!.. 要深刻的记住这种方法..它给我一种警醒,要综合题目来思考..所以我才会做一次.. 脑袋不要转死..一切应该从暴力开始优化..

分析:规律

/* Author:GavinjouElephant * Title: * Number: * main meanning: * * * *///#define OUT#include <iostream>using namespace std;#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <sstream>#include <cctype>#include <vector>#include <set>#include <cstdlib>#include <map>#include <queue>//#include<initializer_list>//#include <windows.h>//#include <fstream>//#include <conio.h>#define MaxN 0x7fffffff#define MinN -0x7fffffff#define Clear(x) memset(x,0,sizeof(x))const int INF=0x3f3f3f3f;const int maxn=2*1e5+10;int x[maxn];int T;int N,M;struct Node{    int x;    int y;};Node node[maxn];int dis(Node a,Node b){    return abs(a.x-b.x)+abs(a.y-b.y);}int main(){#ifdef OUT    freopen("coco.txt","r",stdin);    freopen("lala.txt","w",stdout);#endif    scanf("%d",&T);    while(T--)    {       scanf("%d%d",&N,&M);       memset(x,0,sizeof(x));       for(int i=0;i<N;i++)       {           scanf("%d%d",&node[i].x,&node[i].y);       }       bool flag=false;       for(int i=1;i<N;i++)       {          for(int j=0;j<i;j++)          {              int d=dis(node[j],node[i]);              if(x[d])              {                  flag=true;                  break;              }              x[d]++;          }          if(flag)break;       }       if(flag) printf("YES\n");       else printf("NO\n");    }    return 0;}
0 0