P2220 HAOI2012 容易題 小學數學

2022-04-30 21:24:15 字數 1592 閱讀 5646

有乙個數列a已知對於所有的a[i]都是1~n的自然數,並且知道對於一些a[i]不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的值,是不是很簡單呢?呵呵!

標籤裡面數論是騙人的(霧),難道是因為有個取模嗎???

這題還是很簡單的,首先觀察資料範圍,發現k比較小,那我們就對它做文章。

我們不妨先求出沒有限制條件下的總和,再減去限制條件造成的影響,這樣複雜度就與k有關了。

假設\(p\)為除了位置\(i\)其餘位置的積,那麼

\(ans=1*p+2*p+\cdots+n*p=(\frac)*p\)

對於任意位置,顯然都是這個東西。

那麼\(ans=)}^m\)。

或者理解作一堆項相乘,\(ans=(1+2+\cdots+n)*(1+2+\cdots+n)*\cdots\)

總共有\(m\)項,就變成上面那個東西。

然後我們考慮限制條件。

先對限制按位置排序,對於乙個位置\(i\)的所有限制條件,若它們的和為\(sum\),很容易看出它們剔除的答案為\(sum*)}^*now\)。其中\(now\)為剔除過限制條件的\(1\sim i-1\)的積。\(now\)的初始值是1,每次剔除都乘上\(\frac-sum\)。

而且,由於每次剔除的位置對最後結果無影響,離散化。

複雜度\(o(klogm+klogk)\)。

我的**寫的比較鬼畜,還請各位大佬見諒qwq。

參考**

#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define n 100010

#define mod 2520

#define e 1e-12

#define ll long long

#define mod 1000000007

#define div 500000004

using namespace std;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}ll n,m,k,sum[n];

sets[n];

struct node

}a[n];

inline ll qp(ll a,ll b)return ans%mod;}

int main()

else s[++cnt].insert(a[i].x),sum[cnt]=(sum[cnt]%mod+a[i].x%mod)%mod;

pos=a[i].pos;

}//腦抽寫的set離散化

ll tmp=(n%mod*(n+1)%mod*div%mod)%mod;

ll ans=qp(tmp,m)%mod;

ll now=1;

for(int i=1;i<=cnt;++i)

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

return 0;

}

P2220 HAOI2012 容易題 快速冪

為了使得大家高興,小q特意出個自認為的簡單題 easy 來滿足大家,這道簡單題是描述如下 有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的值,是不是...

洛谷 2220 HAOI2012 容易題

題目描述 為了使得大家高興,小q特意出個自認為的簡單題 easy 來滿足大家,這道簡單題是描述如下 有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的...

數論 HAOI2012 容易題

問題描述 為了使得大家高興,小q特意出個自認為的簡單題 easy 來滿足大家,這道簡單題是描述如下 有乙個數列a已知對於所有的a i 都是1 n的自然數,並且知道對於一些a i 不能取哪些值,我們定義乙個數列的積為該數列所有元素的乘積,要求你求出所有可能的數列的積的和 mod 1000000007的...