• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            gzwzm06

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評論 :: 0 Trackbacks
            如果用過Hash,那么可能主要是算坐標的問題
              1 #include <cstdio>
              2 #include <cmath>
              3 #include <algorithm>
              4 using namespace std ;
              5 
              6 const int MAXN = 1101 ;
              7 const int KEY = 20011 ;
              8 const int MUL = 33 ;
              9 
             10 struct NODE
             11 {
             12     int x , y ;
             13     NODE *next ;
             14 
             15     NODE(){ next = NULL; }
             16 }hash[KEY] , gTemp[MAXN];
             17 
             18 int gPos ;
             19 
             20 struct POINT
             21 {
             22     int x, y ;
             23          
             24 }g_star[MAXN] ;
             25 
             26 int N ;
             27 
             28 bool cmp( const POINT& a, const POINT& b )
             29 {
             30     if ( a.x < b.x ){
             31         return true ;
             32     }
             33     else if ( a.x == b.x )
             34     {
             35         if ( a.y > b.y )
             36         {
             37             return true ;
             38         }
             39         else
             40             return false ;
             41     }
             42     return false ;
             43 }
             44 //計算哈希值
             45 int Cal( const int& sx, const int& sy )
             46 {
             47     int val , x = abs(sx), y = abs(sy) ;
             48     
             49     val = (x * MUL + y) % KEY ;
             50 
             51     return val ;
             52 }
             53 
             54 bool Find( const int& x, const int& y )
             55 {
             56     int pos = Cal( x, y ) ;
             57 
             58     NODE *ptr = hash[pos].next ;
             59 
             60     while ( ptr )
             61     {
             62         if ( ptr->x == x && ptr->y == y )
             63         {
             64             return true ;
             65         }
             66         ptr = ptr->next ;
             67     }
             68 
             69     return false ;
             70 }
             71 
             72 void Insert( const int& x, const int& y )
             73 {
             74     int pos = Cal( x, y ) ;
             75 
             76     NODE *ptr = &gTemp[gPos++] ;
             77 
             78     ptr->x = x ;
             79     ptr->y = y ;
             80     ptr->next = hash[pos].next ;
             81     hash[pos].next = ptr ;
             82 }
             83 //判斷是否能組成一個正方形而且不重復(fù)
             84 bool Judge( const POINT& a, const POINT& b )
             85 {
             86     int dx = ( b.x - a.x ) , dy = ( b.y - a.y ) ;
             87     int x1, y1, x2, y2 ;
             88     int flag = dx * dy ;
             89         
             90         dx = abs(dx) ;
             91         dy = abs(dy) ;
             92 
             93     if ( flag > 0 )
             94     {        
             95         x1 = a.x - dy , y1 = a.y + dx ;
             96         x2 = b.x - dy , y2 = b.y + dx ;
             97     }
             98     else {
             99         x1 = a.x + dy , y1 = a.y + dx ;
            100         x2 = b.x + dy , y2 = b.y + dx ;
            101     }
            102 
            103         if ( x1 <= a.x )
            104             return false ;
            105 
            106     if ( Find( x1, y1 ) && Find( x2, y2 ) )
            107         return true ;
            108     
            109     return false ;
            110 }
            111 
            112 void Init()
            113 {
            114     gPos = 0 ;
            115     for ( int i = 0 ; i < KEY ; ++i )
            116     {
            117         hash[i].next = NULL ;
            118     }
            119 }
            120 
            121 int main()
            122 {
            123     //freopen("in", "r", stdin) ;
            124 
            125     int i , j , count ;
            126 
            127     while ( scanf("%d", &N) && N != 0 )
            128     {
            129         Init() ;
            130         count = 0 ;
            131 
            132         for ( i = 0 ; i < N ; ++i )
            133         {
            134             scanf("%d %d", &g_star[i].x, &g_star[i].y) ;
            135             Insert( g_star[i].x, g_star[i].y ) ;
            136         }
            137                 //按左到右,上到下
            138                 sort(g_star, g_star + N, cmp) ;
            139                 
            140         for ( i = 0 ; i < N - 1 ; ++i )
            141         {
            142             for ( j = i + 1 ; j < N ; ++j )
            143             {            
            144                             if ( Judge(g_star[i], g_star[j]) )
            145                 count++ ;
            146                 
            147             }
            148         }
            149 
            150         printf("%d\n", count) ;
            151     }
            152 
            153     return 0 ;
            154 }
            155 


            posted on 2008-11-12 20:13 閱讀(289) 評論(0)  編輯 收藏 引用 所屬分類: Hash應(yīng)用
            伊人色综合久久天天| 精品久久久久久无码人妻热| 亚洲美日韩Av中文字幕无码久久久妻妇 | 色婷婷久久久SWAG精品| 久久久久国产一区二区| 久久夜色精品国产噜噜亚洲a| 蜜桃麻豆www久久国产精品| 久久久国产打桩机| 久久综合中文字幕| 亚洲欧美一级久久精品| 久久香综合精品久久伊人| 91久久精品国产免费直播| 久久综合伊人77777| 99精品国产在热久久| 欧美精品福利视频一区二区三区久久久精品| 合区精品久久久中文字幕一区| 久久永久免费人妻精品下载| 精品久久国产一区二区三区香蕉| 久久精品国产亚洲AV香蕉| 99热都是精品久久久久久| 日日躁夜夜躁狠狠久久AV| 亚洲国产精品嫩草影院久久| 热re99久久精品国99热| 欧美久久天天综合香蕉伊| 久久国产乱子伦精品免费强| 久久婷婷午色综合夜啪| 国内精品久久久久久麻豆| 97精品国产91久久久久久| 久久久亚洲裙底偷窥综合| 国产精品久久久天天影视香蕉| 久久精品中文騷妇女内射| 久久亚洲精品无码aⅴ大香| 久久本道久久综合伊人| 91精品免费久久久久久久久| 久久久综合九色合综国产| 国内精品久久久久久久97牛牛 | 人妻无码αv中文字幕久久| 亚洲日韩欧美一区久久久久我 | 伊人久久大香线蕉综合网站| 99久久99久久精品国产| 久久亚洲高清观看|