顯然我們對%a[1]得到每個能到的最小值,然後再用a[1]遞加上去即可。
得到能到的最小值跑同餘最短路即可。
但是要注意計算的時候比如計算x,那麼要d[i]<=x才能計算。
ac**:
#pragma gcc optimize("-ofast","-funroll-all-loops")
#include
#define int long long
using namespace std;
const
int n=
5e5+10;
int n,a[n]
,l,r,d[n]
,vis[n]
,res;
void
dijkstra()
);memset
(d,0x3f
,sizeof d)
; d[0]
=0;while
(q.size()
));}
}}inline
intcalc
(int x,
int id)
signed
main()
cout
}
FROM LUOGU 墨墨的等式
傳送門 sol 注意到 b 1e12,而ai 5e5,那麼如果除掉乙個ai也許能過 發現 a1x1 a2x2 anxn b x1 a2 a1x2 an a1xn b a1 假設 b mod a1 w a1為公升序sort後的值 則所有w a1k k為正整數 都可以由w轉到,則考慮0到a1 1共a1個...
2118 墨墨的等式
分析 最短路。題意就是判斷 l,r 內多少數,可以被許多個a1,a2,a3.構成。設最小的mi min。l,r 1e12 直接列舉肯定超時,那麼換個方法列舉。考慮乙個能構成的數b,它一定可以分解為 b k times m i r,r考慮如何計算最小的,mi r的數 建一張無向圖,共mi個點,u表示 ...
bzoj 2118 墨墨的等式
又是好一道數論題!令mn為a 1 a n 中數的最小值。很顯然,如果x能被湊出來,x mn也能被湊出來。所以我們只需要知道對於每乙個x屬於 0,mn 滿足y mn x中最小的y,那麼就能知道 1,r 中模mn等於x的數里能湊出來的個數。注意spfa的時候正無窮要大一點 需要特殊處理一下a 0的情況,...