UNR 2 夢中的題面 HDU6056

2021-08-15 01:34:28 字數 2528 閱讀 3417

這題口胡起來真簡單。。。

先來考慮∑m

i=1x

i≤n,

xi≥0

的整數個數

這可以用插板法證明是(n

+mm)

對於原問題,乙個經典做法是容斥,每次列舉一些數一定超過上界,其他數任意。所以答案可以表示為:∑s

∈u(−

1)|s

|(n+

c∗|s

|−|s

|−∑x

∈sbx

+mm)

(這裡要滿足n+

c∗|s

|−|s

|−∑x

∈sbx

>

0 )

可以發現,(n

+mm)

是乙個關於

n 的

m次多項式,所以可以只求每種方案的k次方的和。

所以可以先列舉|s

| ,然後就能將n+

c∗|s

|−|s

| 算出來。預處理乙個dp

(i,j

,k) 表示1~i位選了j個他們的k次方的和是多少。然後考慮列舉第乙個不同的數字是哪個,然後算一下。。。

複雜度o(m

4)

#include

#define maxn 60

#define mod 998244353

using namespace std;

int c[maxn][maxn],ans,dp[maxn][maxn][maxn],m,b,c;

int a[maxn],im,b[maxn],n,q[maxn],s,len,r[maxn];

char s[maxn*maxn];

int qpow(int a,int b)

int getdiv(int b)

while(n&&!s[n])n--;

return sum;

}bool add(int c)

void print(int ans)

void cal(int i,int j,int nz)

int main()

for(int i=1,ret=1;i<=n&&ret;++i)

if(s[i]-ret<0)s[i]=10+s[i]-ret,ret=1;

else

s[i]-=ret,ret=0;

while(n&&!s[n])n--;

while(n)q[++len]=getdiv(b);

for(int i=0;i<=m;++i)

for(int j=*c[i]=1;j<=i;++j)

c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;

im=1,b[0]=1;

for(int i=1;i<=m;++i)b[i]=1ll*b[i-1]*b

%mod;

for(int i=1;i<=m;++i)im=1ll*im

*i%mod;

im=qpow(im,mod-2);

memset(a,0,sizeof(a)),a[0]=1;

for(int i=0;i<=m-1;++i)

for(int j=i;j>=0;--j)

a[j+1]=(a[j+1]+a[j])%mod,a[j]=1ll*(

m-i)*a[j]%mod;

for(int i=1,j=1;i<=len;++i,j=1ll*j

*b%mod)s=(s+1ll*j

*q[i])%mod;

//for(int i=0;i<=m;++i)printf("[%d]",a[i]);puts("");

for(int i=0;i<=m;++i)a[i]=1ll*a[i]*im

%mod;

memset(dp,0,sizeof(dp));

dp[0][0][0]=1;

for(int i=1;i<=len&&i<=m;++i)

for(int j=0;j<=i;++j)

for(int k=0;k<=m;++k)

int ans=0;

for(int i=0,dx=1;i<=m;++i,dx=mod-dx)

for(int j=0;j<=m;++j)r[j]=0;

intx=0,z=0;

//printf("",len);

for(int j=len;j>=2&&x

<=i;--j)if(q[j])

}if(i==x)

nxt:;

//printf("\n[i=%d]\n",i);

//for(int j=0;j<=m;++j)printf("[%d]",r[j]);

for(int j=0;j<=m;++j)sum=(sum+1ll*r[j]*a[j])%mod;

ans=(ans+1ll*sum

*dx)%mod;

if(!add(c-1))break;

s=(1ll*s+c-1+mod)%mod;

}print(ans);

}}

UNR 2 黎明前的巧克力

解題思路 考慮乙個子集 s 的異或和如果為 0 那麼貢獻為 2 不難列出生產函式的式子,這裡的卷積是異或卷積。x 0 prod 2x 1 因為每一項只有兩項 x 0,x 有值,記 f i x 2x 1 f i x textf x 有 f i x sum 1 2 times 1 x s 不難發現 f ...

uoj 310 UNR 2 黎明前的巧克力

題目描述 題解 考慮到選出的兩個集合的異或值為 0 所以我們可以看做找出集合,其異或值為 0 然後如果這個集合大小是 x 對答案的貢獻就是 2 x 所以我們考慮每個 i 對應乙個多項式 1 2x 只要我們把多項式乘起來即可 我們考慮 fwt 過程中 i 位置上的數對 j 位置的貢獻是數值乘上 1 不...

HHUOJ 1092 題面最短的題

題目鏈結 求該公式的值 i 1n j 1m i2j 4i2 ij 4 i 12 sum sum m i 2j 4i 2 ij 4i 12 i 1 n j 1 m i 2j 4 i2 i j 4i 12 由於答案可能過大,所以請輸出答案對 109 7 取模後的結果。輸入包含多組資料,請讀入到檔案末尾結...