on
建圖過程:帶有小球的帽子交換一次, 表示小球走過一條邊,交換操作可以看作魔術球在帽子序列中的 移動,
使用每個魔術帽的位置為 編號建圖,
操作序列中的 a,b
a,b 連兩條有向邊, 分別為 a
a -> b
b 和 a
ab,邊權為當前操作序號
設該邊編號為 i
i, 到達了 k
k 點, 則小球的下一次移動必定會經過滿足以下條件的邊 ↓
↓與 k
k 相連的
邊的權值大於 i
i 的 所有邊 中最小的那一條
對第二個條件的解釋: 操作順序在 i於是在乙個固定的操作序列中, 即固定的圖中, 小球的起點邊一旦確定, 其路徑也會隨之固定,i 後, 繼 i
i 後 下一次直接改變小球的位置的操作 所代表的邊.
對於加速該操作, 可以使用如**中所示 fk1
[i,0
]=nx
t[i異
或1]f
k1[
i,0]
=nxt
[i異或
1], 然而這樣會導致不可預料的 bug
bug (如最下方**), 所以要謹慎使用
確認了這一點之後, 使用倍增加速 ↓
↓從魔術球所在的帽子所連出的邊中尋找 l
l 操作
魔術球從 l
l 到 r
r 的移動co
deco
de
#include
#define reg register
const
int maxn =
2000005
;int
read()
while
(isdigit
(c)) s = s*
10+ c-
'0', c =
getchar()
;return s * flag;
}struct edge edge[maxn <<1]
;int n;
int m;
int q;
int num0;
int a[maxn]
;int b[maxn]
;int head[maxn]
;int fk_1[maxn][20
];int fk_2[maxn][20
];void
add(
int from,
int to,
int w)
; head[from]
= num0;
}int
main()
for(reg int j =
1; j <=
19; j ++
)for
(reg int i =
2; i <= num0; i ++
)for
(reg int i =
1; i <= q; i ++
)return0;
}
cod
ewit
hbug
code
with
bug
為什麼以 0
0 為第一條邊就 waw
a 掉了…
#include
#define reg register
const
int maxn =
2000005
;int
read()
while
(isdigit
(c)) s = s*
10+ c-
'0', c =
getchar()
;return s * flag;
}struct edge edge[maxn <<1]
;int n;
int m;
int q;
int num0;
int a[maxn]
;int b[maxn]
;int head[maxn]
;int fk_1[maxn][22
];int fk_2[maxn][22
];void
add(
int from,
int to,
int w)
; head[from]
= num0 ++;}
intmain()
for(reg int j =
1; j <=
20; j ++
)for
(reg int i =
0; i <= num0; i ++
)for
(reg int i =
1; i <= q; i ++
)for
(reg int i =
20; i >=
0; i --)if
(edge[t]
.w < l) t = fk_2[t][0
];if(t ==-1
|| edge[t]
.w > r)
for(reg int i =
20; i >=
0; i --
)printf
("%d\n"
, edge[t]
.to?edge[t]
.to:x);}
return0;
}
魔術數字遊戲
填數字方格的遊戲有很多種變化,如下圖所示的4 4方格中,我們要選擇從數字1到16來填滿這十六個格仔 aij,其中i 1.4,j 1.4 為了讓遊戲更有挑戰性,我們要求下列六項中的每一項所指定的四個格仔,其數字累加的和必須為34 四個角落上的數字,即a11 a14 a41 a44 34。每個角落上的2...
洛谷1274 魔術數字遊戲 題解
至少在洛谷2019年7月10日和之前,我擁有不打表程式中的 rank 1 提交記錄 神奇的提交記錄 吐槽一下樣例,它是不完整的。首先為了方便計算我們顯然要把乙個格仔的兩個座標壓成乙個整數。具體計算方法將 i,j 轉換為 i 1 times4 j 1 這裡我來介紹一種比較簡潔的打法,首先我們打表預處理...
python實現模擬數字的魔術遊戲
在遊戲中,魔術師要每位觀眾心裡想乙個三位數abc a b c分別是百位 十位和個位數字 然後魔術師讓觀眾心中記下acb bac bca cab cba五個數以及這5個數的和值。只要觀眾說出這個和是多少,則魔術師一定能猜出觀眾心裡想的原數abc是多少。例如,觀眾甲說他計算的和值是1999,則魔術師立即...