亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

POJ3432-Count Squares

系統 2152 0

轉載請注明出處:優 YoU? http://user.qzone.qq.com/289065406/blog/1304781008

POJ2002 的山寨題,把數據規模從 2002 n=1000 修改為 n=2000 就能 AC

注意這種題一定不能圖方便用 STL map 標記, map 效率不高,必定超時的 .

?

解題思路參看POJ2002:

http://blog.csdn.net/lyy289065406/article/details/6647405

?

?

      
          1
      
      
        //
      
      
        Memory Time
        
2 // 336K 313MS
3
4 #include < iostream >
5 using namespace std;
6
7 const int prime = 1999 ; // 長度為n區間的最大素數 (本題n=2000)
8
9 typedef class
10 {
11 public :
12 int x,y;
13 }Node;
14
15 typedef class HashTable
16 {
17 public :
18 int x,y; // 標記key值對應的x,y
19 HashTable * next; // 當出現地址沖突時,開放尋址
20
21 HashTable() // Initial
22 {
23 next = 0 ;
24 }
25 }Hashtable;
26
27 Node pos[ 2001 ];
28 Hashtable * hash[prime]; // hash[]是指針數組,存放地址
29
30 void insert_vist( int k)
31 {
32 int key = ((pos[k].x * pos[k].x) + (pos[k].y * pos[k].y)) % prime + 1 ; // +1是避免==0
33 // 使key從[0~1998]后移到[1~1999]
34 if ( ! hash[key])
35 {
36 Hashtable * temp = new Hashtable;
37 temp -> x = pos[k].x;
38 temp -> y = pos[k].y;
39 hash[key] = temp;
40 }
41 else // hash[key]已存地址,地址沖突
42 {
43 Hashtable * temp = hash[key];
44
45 while (temp -> next) // 開放尋址,直至next為空
46 temp = temp -> next;
47
48 temp -> next = new HashTable; // 申請新結點,用next指向,記錄x、y
49 temp -> next -> x = pos[k].x;
50 temp -> next -> y = pos[k].y;
51 }
52 return ;
53 }
54
55 bool find( int x, int y)
56 {
57 int key = ((x * x) + (y * y)) % prime + 1 ;
58
59 if ( ! hash[key]) // key對應的地址不存在
60 return false ;
61 else
62 {
63 Hashtable * temp = hash[key];
64
65 while (temp)
66 {
67 if (temp -> x == x && temp -> y == y)
68 return true ;
69
70 temp = temp -> next;
71 }
72 }
73
74 return false ;
75 }
76
77 int main( void )
78 {
79 int n;
80 while (cin >> n)
81 {
82 if ( ! n)
83 break ;
84
85 memset(hash, 0 , sizeof (hash)); // 0 <-> NULL
86
87 for ( int k = 1 ;k <= n;k ++ )
88 {
89 cin >> pos[k].x >> pos[k].y;
90 insert_vist(k); // 插入哈希表,標記散點
91 }
92
93 int num = 0 ; // 正方形的個數
94 for ( int i = 1 ;i <= n - 1 ;i ++ )
95 for ( int j = i + 1 ;j <= n;j ++ )
96 {
97 int a = pos[j].x - pos[i].x;
98 int b = pos[j].y - pos[i].y;
99
100 int x3 = pos[i].x + b;
101 int y3 = pos[i].y - a;
102 int x4 = pos[j].x + b;
103 int y4 = pos[j].y - a;
104
105 if (find(x3,y3) && find(x4,y4))
106 num ++ ;
107
108 x3 = pos[i].x - b;
109 y3 = pos[i].y + a;
110 x4 = pos[j].x - b;
111 y4 = pos[j].y + a;
112
113 if (find(x3,y3) && find(x4,y4))
114 num ++ ;
115 }
116
117 cout << num / 4 << endl; // 同一個正方形枚舉了4次
118 }
119 return 0 ;
120 }

?

POJ3432-Count Squares


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 五月四房婷婷 | 久久新 | 奇米影视在线视频 | 午夜伊人 | 久久综合香蕉 | xxx中国毛茸茸 | a亚洲欧美中文日韩在线v日本 | 亚洲情欲| 国产女人18一级毛片视频 | 久久精品观看 | 亚洲欧美综合一区二区三区四区 | 在线欧美精品一区二区三区 | 国产精品suv一区二区 | 97se狠狠狠狠狼亚洲综合网 | 亚洲精品二区中文字幕 | 成熟日本语热亚洲人 | 亚洲欧美久久一区二区 | 九九在线精品视频xxx | 久久狠狠婷婷丁香香蕉 | 久久久久久久国产精品 | 国产午夜影院 | 蜜桃日本一道无卡不码高清 | 日本不卡高清免费v日本 | 99免费在线 | 日韩一级精品视频在线观看 | 伊人久热这里只精品视频 | 在线激情网址 | 国产综合亚洲欧美日韩一区二区 | 国产成人综合网 | 国产欧美精品一区aⅴ影院 国产欧美精品一区二区 | www.欧美成 | 一级aaaaaa毛片免费 | 欧美日韩国产中文字幕 | a毛片a毛片a视频 | 高清视频一区二区 | 国产97公开成人免费视频 | 欧美一区二区三区综合色视频 | 一级国产20岁美女毛片 | 久久亚洲精品久久久久 | 欧美日韩精品一区二区三区四区 | 亚洲国产精品一区 |