2019牛客國慶集訓派對day2 K 2018

2021-09-28 12:28:35 字數 2000 閱讀 2295

我這裡在原題目上面加了擴充

修改:將2018改為x(x不是很大 ,其他題面內容不變

方法:首先將x分解質因子,變為 x=p

1e1∗

p2e2

∗...

∗pne

nx=p_^*p_^*...*p_^

x=p1e1

​∗p2

e2​∗

...∗

pnen

​的形式

在[a,b]區間我們列舉 %x的餘數 i∈[

0,x−

1]

i\in [0,x-1]

i∈[0,x

−1] ,.然後將 i 裡x的質因子的數除掉,不夠的乘起來,最後得到乙個數y,相當於找到最小的y滿足 i∗y

%x=0

i*y\%x = 0

i∗y%x=

0,則i對應的是[c,d]裡y倍數的數量

單次詢問時間複雜度:o(x

∗xpr

i數量)

o(x*x_)

o(x∗xp

ri數量

​)將下面**修改下可以過掉那題(文章最後面)。

**如下

#include

#define ll long long

const

int n =

2e5+5;

using

namespace std;

int x,a,b,c,d;

ll s1

(int l,

int r,

int mo)

ll s2

(int l,

int r,

int mo)

int pr[

100][2

],len;

intmain()

if(lx!=

1)pr[

++len][0

]=lx,pr[len][1

]=1;

ll ans=

s1(a,b,0)

*(d-c+1)

;//特判i=0

for(

int i=

1;i) ans+=s1

(a,b,i)*s2

(c,d,y);}

printf

("%lld\n"

,ans)

;return0;

}/**

2018 1 2 1 2018

2018 1 2018 1 2018

2018 1 1000000000 1 1000000000

*/

能ac這題的**

#include

#define ll long long

const

int n =

2e5+5;

using namespace std;

int x,a,b,c,d;

ll s1

(int l,

int r,

int mo)

ll s2

(int l,

int r,

int mo)

int pr[

100][2

],len;

intmain()

if(lx!=

1)pr[

++len][0

]=lx,pr[len][1

]=1;

while

(cin>>a>>b>>c>>d)

// printf("y=%d\n",y);

//printf("i=%d %d %d\n",i,y,s1(a,b,i)*s2(c,d,y));

ans+=s1

(a,b,i)*s2

(c,d,y);}

printf

("%lld\n"

,ans);}

return0;

}/**

*/

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牛客國慶集訓派對day7A題

題目理解 給你n,m,a在1到n中,b在1到m中,求a b 2016正整數對的個數 mod 1e9 7 題解 叉姐賊喜歡出這種題,不過確實這種題很好,這題是2016湖南省賽的題目,還有兩個類似的2017年四川省賽的2017和2018年湘潭邀請賽的2018 這幾個題都很像,不過考察的知識點各不相同,叉...