日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BZOJ5213】[ZJOI2018]迷宫(神仙题)

發(fā)布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ5213】[ZJOI2018]迷宫(神仙题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【BZOJ5213】[ZJOI2018]迷宮(神仙題)

題面

BZOJ
洛谷

題解

首先可以很容易的得到一個\(K\)個點的答案。
構(gòu)建\(K\)個點分別表示\(mod\ K\)的余數(shù)。那么點\(i\)的出邊\(j\)指向\(i*m+j\ mod\ K\)。容易證明這樣子一定是可行的。
但是我們顯然還有一部分點是可以丟掉的,即出現(xiàn)點等價的時候,直接合并兩個點即可。
那么什么情況下兩個點等價呢?顯然是兩個點可以到達(dá)的點集相同的時候是可以直接把這兩個點給合并的。
考慮一下\(i*m\)在模\(K\)意義下相等的數(shù)的個數(shù),令\(d=gcd(m,K)\),那么合法的取值有\(K/d\)個。定義一個參數(shù)\(l\)表示還有\([1,l]\)這些數(shù)存在。如果\(l>k/d\),那么在范圍內(nèi)可以取遍所有的合法取值,那么合并這些之后,剩下的部分遞歸處理,這里刪去了\(\frac{m}ozvdkddzhkzd(k-l)\)個合并之后到數(shù)。否則如果\(l\le k/d\),或者\(d=1\),證明必定兩兩不等,所以這\(l\)個數(shù)必須要。

#include<cstdio> #include<algorithm> using namespace std; #define ll long long ll m,k;int T; ll Solve(ll l,ll k) {ll d=__gcd(m,k);if(d==1||l<=k/d)return l;if(k<=(double)m*(k-l))return k/d;return m/d*(k-l)+Solve((k-m*(k-l))/d,k/d); } int main() {scanf("%d",&T);while(T--)scanf("%lld%lld",&m,&k),printf("%lld\n",Solve(k-1,k)+1);return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/cjyyb/p/10366991.html

總結(jié)

以上是生活随笔為你收集整理的【BZOJ5213】[ZJOI2018]迷宫(神仙题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。