2014年一码中特
首頁 > 其他 > 詳細

【hash表】門票

時間:2019-08-11 01:37:32      閱讀:17      評論:0      收藏:0      [點我收藏+]

標簽:view   col   img   bfc   div   mes   個數   數組   long   

問題 I: 【哈希和哈希表】門票

題目描述

RPK要帶MSH去一個更加神秘的地方!
RPK帶著MSH穿過廣場,在第1618塊磚上按下了一個按鈕,在一面墻上隨即出現了一個把手。RPK握住把手,打開了一扇石質大門。他們穿過悠長而芬芳的小道,走到了一扇象征時間的大門――“the gate of time”。
門上寫著一個關于時間的謎題“承諾:____年”,RPK思考了一會,從容地用手指寫下1萬,這時,門開始發出閃光,MSH感覺到自己的心跳都快停止了。
門開了,眼前是一座美麗的神秘花園!
正當RPK和MSH準備進入的時候,突然出現了一個看門的老大爺QL。
QL:“你們干什么你們,還沒買票呢!”
RPK突然想起來現金全拿去買蛋糕了,RPK很紳士的問:“能刷卡么?我身上沒現金。”
QL:“沒錢?那你們不能進去!”
RPK(汗):“……”
QL:“等等,我這有道不會的數學題,你解了我就讓你們進去。”
(眾人:“……”)
有一個數列{an},a0=1,ai+1=(A*ai+ai mod B)mod C,要求這個數列第一次出現重復的項的標號。
這點小問題當然難不倒數學bug男RPK了,僅憑心算他就得到了結果。

 

輸入

一行3個數,分別表示A B C

 

輸出

輸出第一次出現重復項的位置,如果答案超過2000000 輸出-1

 

樣例輸入

2 2 9

樣例輸出

4

提示

30%的數據A B C≤1e5
100%的數據 A B C≤1e9


 

【題解】:

本來想使用hash表來存儲的,后來發現卡我時間,太卡了,所以換了一種,桶標記。分別記錄在兩個位置

這個方法也是參考別人的代碼的。還有注意Mod的數盡可能接近數組大小。

 

技術分享圖片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4  
 5 const int N = 5e6+10;
 6 const int Mod1 = 2200000;
 7 const int Mod2 = 2181271;
 8 const int p1 = 131 ;
 9 const int p2 = 13331 ;
10  
11 int vis[N][2];
12 ll A,B,C;
13  
14 int cnt = 0 , Next[N+5],Head[Mod2+10],W[N];
15  
16 int main()
17 {
18     ios_base :: sync_with_stdio(NULL);
19     cin.tie(0),cout.tie(0);
20     //scanf("%lld%lld%lld",&A,&B,&C);
21     cin >> A >> B >> C  ;
22  
23     vis[1][0] = vis[1][1] = 1 ;
24     ll p1 = 1 , p2 = 1 ;
25     for(int i=1;i<=2000000;i++){
26         p1 = ( p1 * A + p1 % B ) %C ;
27         p2 = ( p2 * A + p2 % B ) %C ;
28  
29         if( vis[p1%Mod1][0] && (vis[p1%Mod1][0] == vis[p2%Mod2][1]) ){
30             cout << i << endl ;
31             return 0;
32         }
33         if( !vis[p1%Mod1][0] ) vis[p1%Mod1][0] = i ;
34         if( !vis[p2%Mod2][1] ) vis[p2%Mod2][1] = i ;
35     }
36     cout << -1 << endl;
37     return 0;
38 }
View Code

 

【hash表】門票

標簽:view   col   img   bfc   div   mes   個數   數組   long   

原文:https://www.cnblogs.com/Osea/p/11333464.html

(0)
(0)
   
舉報
評論 一句話評論(0
登錄后才能評論!
? 2014 bubuko.com 版權所有 魯ICP備09046678號-4
打開技術之扣,分享程序人生!
             

魯公網安備 37021202000002號

2014年一码中特