停課了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 的意義...