JZOJ 省選模擬 數字收藏(數字收藏)

2021-10-05 02:54:51 字數 1620 閱讀 7800

description

小 h 是乙個收藏家,他喜歡收藏正整數。小 h 有乙個習慣,那就是在他睡覺之前,計算在

他收藏的所有正整數中,有多少對正整數的最大公因數恰好是 k。

小 h 每一天可能會新收藏乙個正整數,當然,也可能因為某些原因丟棄乙個正整數。這使

得他收藏的正整數在不斷變化,每天睡前計算出來的值也可能不一樣。不過 k 是永遠不會變的。

同時,小 h 保證,k 是 1 或質數。

小 h 想知道,在他每新收藏乙個正整數,或丟棄乙個正整數之後,還有多少對正整數的最

大公因數是 k 呢?

input

第一行兩個整數 n,k。

接下來 n 行,每行兩個整數 a,b。

• 如果 a = 0,表示小 h 丟棄了乙個他收藏的正整數 b。如果此時小 h 收藏的正整數中沒有

b,那可能是小 h 記錯了,因此不需要作出任何改變。

• 如果 a = 1,表示小 h 新收藏了乙個正整數 b。注意,小 h 可以收藏很多個相同的正整數。

output

輸出 n 行,每行乙個整數,表示一次丟棄或者收藏之後的答案。

sample input

【樣例 1 輸入】

5 21 2

1 40 2

1 21 2

【樣例 2 輸入】

8 31 3

0 30 3

1 31 6

1 91 12

1 2sample output

【樣例 1 輸出】01

013【樣例 2 輸出】00

0013

55data constraint

記 z 為小 h 收藏過的正整數中的最大值。

對於所有資料,1 ≤ k ≤ z。

將每個數/=k,忽略%k!=0的數

考慮容斥原理,那麼每新加入乙個數 b,答案將增加

其中 cnt[d] 表示目前集合裡有多少個數是 d 的倍數。

#include

#define ll long long

using

namespace std;

const

int n =

2e5+5;

vector<

int> g[n]

;int n,k,cnt[n]

,a[n]

,m =

100000

,miu[n]

;ll ans;

bool bz[n]

;ll c2

(ll x)

void

add(

int x)

}void

del(

int x)

}int

main()

}scanf

("%d%d"

,&n,

&k);

while

(n--

)}

JZOJ 省選模擬 數二數(two)

第一行正整數n和p output 輸出乙個數,表示答案對p取模。sample input 樣例輸入1 3 1000000007 樣例輸入2 7 999997543 sample output 樣例輸出1 48樣例輸出2 要區別所有的位置,必須滿足每個位置的詢問集合不同。定義f i 表示一共i個位置的...

JZOJ 省選模擬 string

一行乙個整數表示答案。sample input 樣例輸入 3 3sample output 樣例輸出 首先我們忽略重複的字串,定義 n 表示長度為 n 的回文串,或由兩個回文串拼成的字串數量。那麼可以通過列舉第乙個回文串的長度 可以為 0 可以算出f n 但是正如剛才所說,會對如 abaaba 這樣...

JZOJ 省選模擬 Moorio Kart

description 由於目前可供奶牛們使用的約會 並沒有給 farmer john 留下深刻印象,他決定推出乙個基於新匹配演算法的奶牛交友 該演算法可基於公牛和母牛間的共同興趣對公牛和母牛進行匹配。bessie 在尋找情人節 barn dance 的合作夥伴時,決定試用這個 在註冊賬戶之後,fj...