我真不想寫背景

2021-07-14 12:29:07 字數 2377 閱讀 5605

某巨魔突然對等式很感興趣,他正在研究 a1

x1+a

2x2+

…+an

xn=b

存在非負整數解的條件。

他要求你編寫乙個程式,給定

n 、an

、以及

b 的取值範圍,求出有多少

b可以使等式存在非負整數解。

輸入的第一行包含

3 個正整數,分別表示 n、

bmin

、bma

x 分別表示數列的長度、

b 的下界、

b的上界。

輸入的第二行包含

n 個整數,即數列 an

的值。輸出乙個整數,表示有多少

b 可以使等式存在非負整數解。

2 5 10

3 5

對於 b=

5,式子有 x1

=0,x2=

1 。

對於 b=6

,式子有 x1

=2,x

2=0 。

對於 b=7

,無解。

對於 b=8

,式子有 x1

=1,x2=

1 。

對於 b=9

,式子有 x1

=3,x2=

0 。

對於 b=10

,式子有 x1

=0,x2=

2 。20%

的資料,n≤

5 ,1≤

bmin

≤bma

x≤10 。 40%

的資料,n≤

10 ,1≤

bmin

≤bma

x≤106

。 100%

的資料,n≤

12 ,0≤

ai≤4

∗105 ,1≤

bmin

≤bma

x≤1012

。因為

b 的範圍很大,所以我們考慮將其取模。

對於模 a1

的完全剩餘系中的每乙個元素

y ,若能找到最小的能夠表示為 m=

∑i=2

naix

i且 mm

oda1

=y的

m ,則對於範圍內的任意乙個與

y關於模 a1

同餘的

b 都滿足 b=

ka1+

m則對於每乙個

y ,可以算出範圍內的與

y關於模 a1

同餘的

b 的個數為⌊b

max−

ma1⌋

−max

(⌈bm

in−m

a1⌉,

0)+1

那麼,如何求出

m 呢? ∵m

≡y(moda1

)∴m−

y=ka

1 ∴∑

i=2n

aixi

−ka1

=y現已知 y1

,列舉 ak

,則可以更新 (y

1+ak

)mod

a1: 設 fi

表示 i 所對應的

m要變成

i 需要減去多少個 a1

。 則f(

y1+a

k)mo

da1=

fy1+

((y1

+ak)

要變成(

(y1+

ak)m

oda1

)需要減

去多少個

a1)

這就是乙個最短路模型,每次用 sp

fa更新當前元素所能更新的元素。

#include 

#include

#include

#include

#include

#include

#define ll long long

#define max(x,y) ((x)>(y)?(x):(y))

using

namespace

std;

ll n,bmi,bma,ans;

ll a[20],dis[400010];

bool in_stack[400010];

queue

q;void spfa()

if(dis[tmp]==-1||dis[tmp]>dis[now]+qq)}}

}}int main()

printf("%lld\n",ans);

return

0;}

我真的不想寫背景

某巨魔有一風扇,長得和下圖乙個慫樣。這風扇原來有 n 個等分葉片,順時針編號 1到 n 誰是編號 1這不重要 任意兩個相鄰的葉片間隔相等,大小質地相同。這個 n 滿足 n pa q b,p q為質數,a b為自然數。風扇一開始還不錯,但是到後來風扇開始報復社會了。它的葉片從窗戶甩了出去甩到了大街上,...

我已經不想寫演算法了

終於可以在辦公室寫程式了 但是回來卻比以前累了 又到一年招聘時,部落格上好多 面經 宛如昨日。缺少大型專案經驗,缺乏 實踐,課程學習不紮實,不熟練,都可能導致在面試中被刷掉。當然,這裡的邏輯是,第一等的學習成績還是必殺的。又一次湧起學演算法的衝動。大量的現有開源專案閱讀 學習 二次開發,專案的設計思...

我已經不想寫演算法了

終於可以在辦公室寫程式了 但是回來卻比以前累了 又到一年招聘時,部落格上好多 面經 宛如昨日。缺少大型專案經驗,缺乏 實踐,課程學習不紮實,不熟練,都可能導致在面試中被刷掉。當然,這裡的邏輯是,第一等的學習成績還是必殺的。又一次湧起學演算法的衝動。大量的現有開源專案閱讀 學習 二次開發,專案的設計思...