P2260 清華集訓2012 模積和

2022-03-04 05:57:31 字數 1865 閱讀 3803

數學題,無背景。

求$\sum\limits_^ \sum\limits_^ (n \bmod i) \times (m \bmod j), i \neq j \;\bmod\;19940417$ 的值

輸入格式:

兩個整數n m

輸出格式:

答案 mod 19940417

輸入樣例#1: 

3 4

輸出樣例#1: 

1

輸入樣例#2: 

123456 654321

輸出樣例#2: 

116430

30%: n,m <= 1000

60%: n,m <= 10^6

100% n,m <= 10^9

solution:

本題實在是太賊有意思了。。。

開始沒有發現條件$i\neq j$,結果一直以為取模錯誤,搞了半天。

首先,我們先忽略$i\neq j$的條件,直接求$\sum\limits_^ \sum\limits_^ (n \bmod i) \times (m \bmod j)$。

對原式化簡:原式$=\sum\limits_^\rfloor)\sum\limits_^\rfloor)}}=(n^2-\sum\limits_^\rfloor))(m^2-\sum\limits_^\rfloor)})}$,然後對這個式子兩邊各自一遍數列分塊套上等差數列求和,求出$ans$值並取模。

由於多算了$i==j$的情況,所以我們還要從$ans$中減去$i==j$的情況。

對於$i==j$的情況累加的值$tot$,容易得出$tot=\sum\limits_^\rfloor)\times(m-j\times\lfloor\rfloor)}=\sum\limits_^\rfloor-n\times i\times \lfloor\rfloor-m\times i\times\lfloor\rfloor}$

然後對於$n\times m$直接累加,對於$n\times i\times \lfloor\rfloor\;,\;m\times i\times\lfloor\rfloor$還是數論分塊套上等差數列求和。

難的是求$i^2\times\lfloor\rfloor$,此時應用乙個數學公式:$1^2+2^2+…+x^2=\frac$,設$c=min(n/(n/i),m/(m/i))$,那麼$i^2+^2+…+c^2=\frac-\frac$,這樣原式就能直接公式求了,但是因為存在取模的條件,所以此時騷操作是處理出$6$的因子並約掉,或者直接預先算出$6$關於模數的逆元$inv$。

最後輸出$ans$就好了。

**:

#include#define il inline

#define ll long long

#define for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)

#define bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)>(b)?(b):(a))

using

namespace

std;

const

int mod = 19940417 , inv = 3323403

;ll n,m;

il ll solve(ll x)

return

ans;

}il ll

get(ll x)

intmain()

cout

return0;

}

P6670 清華集訓2016 汽水

p6670 清華集訓2016 汽水 給一棵樹,邊有邊權,要求找到一條路徑使得其平均值和 k 最接近。首先樹上路徑容易想到點分治。然後發現這可以套乙個 0 1 分數規劃,於是我們可以把所有的邊權減掉 k 再二分 mid 現在的問題就是判斷了。我們發現答案具有單調性,於是我們可以排序過後雙指標維護路徑。...

清華集訓 2014 玄學

update text update 我之前講的是個什麼鬼 如果想看看人話版本 戳這。感覺自己被坑騙了。題目明明寫了所有資料不超過int,敢情是輸入資料不超int?迷惑行為 題目感覺有點繞,我盡量 不口胡。首先我們搞一顆線段樹1,樹表示插入序列的編號。如,在q行中第i個出現插入操作 其實拿到這道題我...

清華集訓2016 汽水

試題描述 牛牛來到了乙個盛產汽水的國度旅行。這個國度的地圖上有n個城市,這些城市之間用 n 1 條道路連線,任意兩個城市之間,都存在一條路徑連線。這些城市生產的汽水有許多不同的風味,在經過道路 i 時,牛牛會喝掉 wi 的汽水。牛牛非常喜歡喝汽水,但過量地用汽水是有害健康的,因此,他希望在他旅行的這...