魔法少女小瑩瑩 SDUT

2021-09-24 00:13:01 字數 1314 閱讀 2191

problem description

小瑩瑩被困在了乙個由 n 個石柱圍成一圈組成的迷宮裡,也就是 1, 2, 3, … n, 1, 2, 3, …. 這樣一直迴圈。

她起始位置是 1,每次只能沿著順時針方向選擇飛躍 a 或者 b 距離的魔法,也就是從當前石柱 i 飛往 i+a 石柱或者 i+b 石柱。

第 m 個石柱有傳送門,她只有到達第 m 個石柱,才能從這個迷宮逃脫出去。

問你小瑩瑩能否能順利的逃離迷宮,如果不能輸出 「no」.

如果能輸出 「yes」,同時問你小瑩瑩最少需要使用幾次魔法?

input

第一行輸入正整數 t 代表有 t 組測試資料。

對於每一組測試資料:

第一行輸入由空格隔開的 n, m 代表石柱的數量和所需到達的石柱。

第二行輸入由空格隔開的 a, b 代表兩個魔法,乙個可以飛躍 a 距離,乙個可以飛躍 b 距離。

( 1 <= n <= 1e5, 0 <= a, b < n, 1 <= m <= n, t 組資料 n 的和 <= 5e6 )

output

如果小瑩瑩順利逃離迷宮:

第一行輸出:」yes」

第二行輸出:小瑩瑩最少使用魔法次數。

如果小瑩瑩無法逃離迷宮:

第一行輸出:」no」

答案不包含 「」。

sample input

38 6

2 34 3

4 34 4

2 2sample output

yes2

yes2

no

hint

source

satw_zg

#include using namespace std;

int bfs(int a, int b, int c, int d, int e);

const int maxn = 100010;

int cnt[maxn];//每個點到初始位置要幾步

bool vis[maxn];//標記該點有沒有走過

int main()

else

}return 0;

}int bfs(int a, int b, int c, int d, int e)

k = (s + c)%e;//跳躍c

if(k == 0)k = e;

if(!vis[k])

k = (s + d)%e;//跳躍d

if(k == 0)k = e;

if(!vis[k])

}return -1;

}

魔法少女小Scarlet

scarlet最近學會了乙個陣列魔法,她會在n n二維陣列上將乙個奇數階方陣按照順時針或者逆時針旋轉90 首先,scarlet會把1到n2 的正整數按照從左往右,從上至下的順序填入初始的二維陣列中,然後她會施放一些簡易的魔法。scarlet既不會什麼分塊特技,也不會什麼splay套splay,她現在...

魔法少女(動態規劃)

討論區 魔法少女 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述前些時間虛淵玄的鉅獻小圓著實火了一把。在黑長直 小炎 往上爬樓去對抗魔女之夜時,她遇到了乙個問題想請你幫忙。因為魔女之夜是懸浮在半空的,所以她必須要爬樓,而那座廢墟一共有n層,而且每層高度不同,這造成小炎爬每層的...

nyoj 1204 魔法少女

動態規劃 dp i 0 表示i層不用魔法的最少步數 dp i 1 表示i層用魔法的最少步數 dp i 0 min dp i 1 0 dp i 1 1 a i dp i 1 min dp i 1 0 dp i 2 0 dp 0 1 dp 1 1 0 dp 0 0 h 0 dp 1 0 h 1 incl...