2118 墨墨的等式

2022-04-06 13:32:50 字數 1012 閱讀 2348

分析:最短路。

題意就是判斷[l,r]內多少數,可以被許多個a1,a2,a3...構成。設最小的mi = min。l,r<=1e12

直接列舉肯定超時,那麼換個方法列舉。

考慮乙個能構成的數b,它一定可以分解為$b = k \times m_i + r, \ r考慮如何計算最小的,%mi=r的數:建一張無向圖,共mi個點,u表示%mi=u點。dis[u]為最小的%mi=u的數。那麼可以跑最短路處理處dis[u](即我們要求的)。

然後就可以直接計算了。可以計算出小於等於r的減去小於等於l-1的。

設$dis[r]=k \times mi + r$,那麼小於等於r的就是$(r-dis[r])/m_i+1$,就是k可以是多少。

**:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include

8 #include9 #include10 #include11

using

namespace

std;

12 typedef long

long

ll;13

14 inline int

read()

1819

const ll inf =1e18;

20int a[20], n, mi =1e9;

21 ll dis[500005

];22

bool vis[500005

];23

24#define pa pair25

#define mp(a,b) make_pair(a,b)

2627 priority_queue< pa, vector< pa >, greater< pa > >q;

2829

void

dijkstra() 43}

44}45}

46 ll calc(int

i,ll x)

51int

main()

bzoj 2118 墨墨的等式

又是好一道數論題!令mn為a 1 a n 中數的最小值。很顯然,如果x能被湊出來,x mn也能被湊出來。所以我們只需要知道對於每乙個x屬於 0,mn 滿足y mn x中最小的y,那麼就能知道 1,r 中模mn等於x的數里能湊出來的個數。注意spfa的時候正無窮要大一點 需要特殊處理一下a 0的情況,...

bzoj2118 墨墨的等式

time limit 10 sec memory limit 259 mb submit 878 solved 337 submit status discuss description 墨墨突然對等式很感興趣,他正在研究a1x1 a2y2 anxn b存在非負整數解的條件,他要求你編寫乙個程式,給...

BZOJ 2118 墨墨的等式

這道題太tm神了。智商 啊 好題啊!找乙個ai,若x為合法的b,則x ai也合法 設bi為最小的x,滿足x mod mn i 求出每個bi就可以求答案了 bi用最短路求就好了啊 意會一下 最後列舉餘數搞一下就算出答案了 好短啊2333 include using namespace std type...