FROM LUOGU 墨墨的等式

2021-09-28 19:59:27 字數 723 閱讀 6082

傳送門

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個點跑最短路,每次可以跑一條ai權值的邊

則跑出來的dis[i]可以表示最小的可以構造出的w+a1*k

然後就可以統計答案了

**:

#include

#define int long long

#define re register

#define n 500005

using

namespace std;

inline

intrd()

queue<

int>q;

bool vis[n]

;int inf,dis[n]

,a[13

],n,l,r,ans;

inline

void

spfa()

}}}signed

main()

cout

}

墨墨的等式

顯然我們對 a 1 得到每個能到的最小值,然後再用a 1 遞加上去即可。得到能到的最小值跑同餘最短路即可。但是要注意計算的時候比如計算x,那麼要d i x才能計算。ac pragma gcc optimize ofast funroll all loops include define int lo...

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的情況,...