2019牛客國慶集訓派對day7A題

2021-09-28 02:29:05 字數 1325 閱讀 8024

題目理解:

給你n,m,a在1到n中,b在1到m中,求a*b==2016正整數對的個數(mod 1e9+7)

題解:叉姐賊喜歡出這種題,不過確實這種題很好,這題是2016湖南省賽的題目,還有兩個類似的2023年四川省賽的2017和2023年湘潭邀請賽的2018;

這幾個題都很像,不過考察的知識點各不相同,叉姐真牛皮呀!!!!qwq!

今天對這幾個題做個總結,先講從簡單的開始說,(2023年四川省賽的g題)

就是給定區間 [ a , b ] , [ c , d ] , 然後分別在兩個區間中各找乙個數 x , y , 要求 x 屬於第乙個區間, y 屬於第二個區間,並且 x * y 是2017的倍數。

思路:因為2017是個素數,所以求的時候只能x是2017的倍數或者y是2017的倍數,因此我們需要統計出各個區間內2017的倍數,這個可以通過線篩來實現,也可以直接線性求出(b/2017-a/2017+1)可以自己證明一下,然後求出m和n,表示a到b區間內的2017的倍數和c到d區間內2017的倍數,之後答案就是(b-a+1)*(d-c+1)-(b-a+1-m)*(d-c+1-n);(也可以用容斥定理)

詳解可以參考這篇部落格:

之後講一下2018湘潭邀請賽的k題;

題意就是求有多少對x,y(a<=x<=b,c<=y<=d)滿足(x∗y)mod2018=0。

題解:這個題和上個題類似,但是上個題因為是質數比較簡單,而這個題是合數有點麻煩。

很容易知道2018的因子有兩個2和1009,因此我們可以去列舉所有情況。(有點複雜,詳解請參考2018湘潭邀請賽k題)

1.左邊1009奇數倍的個數乘以右邊偶數個數

2.左邊2018的倍數的個數乘以右邊的所有的數

3.右邊1009奇數倍的個數乘以左邊偶數的個數(因為2018的倍數同樣是偶數,在u裡面已經計算過,所以要減去)

4.右邊2018的倍數的個數乘以左邊所有的數(同樣要減去已經計算過的1009奇數倍的個數)

左邊和右邊分別為a到b和c到d。

**如下(來自網上):

#include using namespace std;

typedef long long ll;

ll count(int a,int b,int v)//計算區間[a,b]內v的因子個數

int main()

for(int i=1;i<=n%2016;i++)

cnt1[i]++;

for(int i=1;i<=m%2016;i++)

cnt2[i]++;

// 這兩個迴圈是對上面餘數的補充。

}int main()

return 0;

}

2019牛客國慶集訓派對day1

雖然我國慶七天溜回家了,隊友還是督促我好好打比賽.畢竟現場賽也沒幾天了,好好練習哈 判斷矩陣是否存在子矩陣滿足 x 1 le x le x 2,y 1 le y le y 2 內全是1,其他地方為0。水題,暴力判斷一下即可。include includeusing namespace std cha...

2019牛客國慶集訓派對day3 H

題意 動態插入一維線段端點為 li ri l i,r i li r i 查詢給定引數 li ri l i,r i li r i 問有多少條線段可以覆蓋它。我看了一眼感覺cdq可以寫我就寫了2333,複雜度是在o n log 2n l og2n o n log 2n log 2n o n lo g2 ...

2019牛客國慶集訓派對day7 A 2016

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k special judge,64bit io format lld 給出正整數 n 和 m,統計滿足以下條件的正整數對 a,b 的數量 1.1 a n,1 b m 2.a b是 2016 的倍數。輸入包含不超...