國集 墨墨的等式 同餘類BFS

2022-09-10 00:21:40 字數 1180 閱讀 1709

停課了orz,然而馬上就noip了,我還這麼弱,十分害怕。

bzoj2118(非權)

luogu2371

time limit: 10 sec  memory limit: 259 mb

submit: 2882  solved: 1177

[submit][status][discuss]墨墨突然對等式很感興趣,他正在研究a1x1+a2y2+…+anxn=b存在非負整數解的條件,他要求你編寫乙個程式,給定n、、以及b的取值範圍,求出有多少b可以使等式存在非負整數解。

輸入的第一行包含3個正整數,分別表示n、bmin、bmax分別表示數列的長度、b的下界、b的上界。輸入的第二行包含n個整數,即數列的值。

輸出乙個整數,表示有多少b可以使等式存在非負整數解。

2 5 10

3 55

對於100%的資料,n≤12,0≤ai≤5*10^5,1≤bmin≤bmax≤10^12。

這是一道數學?這是乙個揹包?不,這是一道圖論!

觀察發現係數都很小。我們根據poi2013sums的同餘類bfs,首先轉化為在同餘最小的那個距離上搞,這樣我們就可以找到第乙個在%x(假定x是最小)最小的到達那個%x意義下的最小數。這樣%x意義下更大的答案也一定可以到達。這樣我們跑一下spfa(顯然這種題對spfa十分友好),就可以找出來了,之後就隨便搞出來了。

對於這樣的一類題,有乙個名字,叫同餘類bfs,有機會學一學還是覺得十分機智的.

talk is cheap , show me code!

#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 500005;

ll dis[maxn];

int n;ll bmin,bmax;

int a[15]; bool rd[maxn];

queueq;

void spfa() }}

} }int main()

sort(a+1,a+1+n);

spfa();

ll ans = 0;

for(int i=0;i=bmin) ans += ((bmax-dis[i])/a[1]+1);

else }}

printf("%lld",ans);

}

bzoj 2118 墨墨的等式(同餘最短路)

題目大意 墨墨突然對等式很感興趣,他正在研究a1x1 a2y2 anxn b存在非負整數解的條件,他要求你編寫乙個程式,給定n 以及b的取值範圍,求出有多少b可以使等式存在非負整數解。這種題的主要思路就是,找到所有 之後只要不斷加上自己就都是合法的解,可以直接求和,那麼這個最小值怎麼找呢?只要利用最...

bzoj2118 墨墨的等式 同餘最短路

墨墨突然對等式很感興趣,他正在研究a1x 1 a2 x2 anx n ba 1x 1 a 2x 2 a nx n b a1 x1 a2 x2 an xn b存在非負整數解的條件 他要求你編寫乙個程式,給定n n,n,以及b bb的取值範圍,求出有多少b可以使等式存在非負整數解。n 12 0 a i ...

P2371 國家集訓隊 墨墨的等式 同餘最短路

傳送門 題意 思路 乙個同於最短路的板子題,初始的時候值為0,所以設dis 0 0dis 0 0 dis 0 0,讓後選擇乙個最小的a i a i a i 作為b as ebase base 跑一遍同餘最短路就好啦。跑完dis i dis i dis i 表示在模bas ebase base 的意義...