日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对

發布時間:2023/12/3 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Co-prime
    • source
    • solution
    • code
  • Character Encoding
    • source
    • solution
    • code
  • Tree and Constraints
    • source
    • solution
    • code
  • 「2017 山東一輪集訓 Day7」逆序對
    • source
    • solution
    • code

Co-prime

source

TTT組數據,給出𝐿,𝑅,𝑁𝐿, 𝑅, 𝑁L,R,N,求在區間[𝐿,𝑅][𝐿, 𝑅][L,R]中有多少個整數與𝑁𝑁N互質

solution

與SCOI2010幸運數字幾乎一樣的解決思路,甚至是弱化版

NNN最多含有111111個質因子

容斥原理

至少含000NNN的質因子的個數?-?至少含111NNN?的質因子的個數+++至少含222NNN?的質因子的個數.........

完全可以dfs搜索是哪些質因子,也就2112^{11}211

code

#include <cstdio> #define int long long int ans, m, l, r; int prime[20];void divide( int n ) {for( int i = 2;i * i <= n;i ++ )if( n % i == 0 ) {prime[++ m] = i;while( n % i == 0 ) n /= i;}if( n > 1 ) prime[++ m] = n; }int calc( int x ) {int L = l / x + ( l % x != 0 ), R = r / x;return R - L + 1; }void dfs( int p, int cnt, int sum ) {if( p > m ) {if( cnt & 1 ) ans -= calc( sum );else ans += calc( sum );return;}dfs( p + 1, cnt, sum );dfs( p + 1, cnt + 1, sum * prime[p] ); }signed main() {int T, n;scanf( "%lld", &T );for( int Case = 1;Case <= T;Case ++ ) {scanf( "%lld %lld %lld", &l, &r, &n );ans = m = 0;divide( n );dfs( 1, 0, 1 );printf( "Case #%lld: %lld\n", Case, ans );}return 0; }

Character Encoding

source

TTT組數據

𝑚𝑚m個數,每個數的取值范圍都是[0,𝑛?1][0, 𝑛?1][0,n?1]?的整數。

求有多少種給這𝑚𝑚m?個數賦值的方案,使得他們的和為𝑘𝑘k

方案數可能很大,請對998244353998244353998244353取模

solution

隔板法

把和為kkk,拆分成kkk111的盒子,通過m?1m-1m?1塊隔板分割成為mmm個數字

但是隔板法不能有000的情況

就強制每個數字自帶111,也將取值范圍+1+1+1變成[1,n][1,n][1,n],那么最后的和也對應變成k+mk+mk+m

根據隔板法可以得到在無限制的情況下方案數為(m+k?1m?1)\binom{m+k-1}{m-1}(m?1m+k?1?)

容斥原理,強制iii個劃分區域>n>n>n,隔板個數減少i?ni*ni?n

相當于已經有nnn個小球放到某個盒子內,然后把剩下小球放進mmm個盒子里面

code

#include <cstdio> #define mod 998244353 #define int long long #define maxn 200005 int T, n, m, k; int fac[maxn], inv[maxn];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans; }void init( int N ) {fac[0] = inv[0] = 1;for( int i = 1;i <= N;i ++ )fac[i] = fac[i - 1] * i % mod;inv[N] = qkpow( fac[N], mod - 2 );for( int i = N - 1;i;i -- )inv[i] = inv[i + 1] * ( i + 1 ) % mod; }int C( int n, int m ) {if( n < 0 || m < 0 || n < m ) return 0;else return fac[n] * inv[m] % mod * inv[n - m] % mod; }signed main() {init( 2e5 );scanf( "%lld", &T );while( T -- ) {scanf( "%lld %lld %lld", &n, &m, &k );int ans = C( m + k - 1, m - 1 );for( int i = 1;i <= m;i ++ )if( i & 1 ) ans = ( ans - C( m, i ) * C( m + k - i * n - 1, m - 1 ) % mod ) % mod;else ans = ( ans + C( m, i ) * C( m + k - i * n - 1, m - 1 ) % mod ) % mod;printf( "%lld\n", ( ans + mod ) % mod );}return 0; }

Tree and Constraints

source

給定一個含有𝑛𝑛n個節點的樹,每一條邊可以染成黑色或者白色

𝑚𝑚m??個限制條件,每一個限制條件包括兩個節點(𝑢,𝑣)(𝑢, 𝑣)(u,v)?,限制為𝑢,𝑣𝑢, 𝑣u,v兩個節點之間的路徑中必須包含至少一個涂成黑色的邊

問有多少種染色方法使得這mmm個條件同時滿足

solution

容斥原理

iii個限制滿足不了,那么這iii個限制的路徑的交都是白邊,剩下的邊無所謂

n≤50n\le 50n50,用long long壓二進制路徑

求個路徑的交

code

#include <cstdio> #include <algorithm> using namespace std; #define int long long #define maxn 55 vector < int > G[maxn]; int path[maxn], limit[maxn];void dfs( int u, int fa, int s ) {path[u] = s;for( auto v : G[u] ) {if( v == fa ) continue;else dfs( v, u, 1ll << v | s );} }signed main() {int n, m;scanf( "%lld", &n );for( int i = 1, u, v;i < n;i ++ ) {scanf( "%lld %lld", &u, &v );G[u].push_back( v );G[v].push_back( u );}dfs( 1, 0, 0 );scanf( "%lld", &m );for( int i = 0, u, v;i < m;i ++ ) {scanf( "%lld %lld", &u, &v );limit[i] = path[u] ^ path[v];}int ans = 0;for( int i = 0;i < ( 1 << m );i ++ ) {int s = 0, cnt = 0;for( int j = 0;j < m;j ++ )if( 1 << j & i ) cnt ++, s |= limit[j];if( cnt & 1 ) ans -= 1ll << n - 1 - __builtin_popcountll( s );elseans += 1ll << n - 1 - __builtin_popcountll( s );}printf( "%lld\n", ans );return 0; }

「2017 山東一輪集訓 Day7」逆序對

source

給出𝑛,𝑘𝑛, 𝑘n,k,求有多少個𝑛𝑛n的全排列滿足其逆序對數等于𝑘𝑘k

答案可能很大,請對998244353998244353998244353?取模

solution

按從小到大的順序加入的話,iii?進去可能會造成xi∈[0,i?1]x_i\in[0,i-1]xi?[0,i?1]?的貢獻

相當于求∑i=1nxi=k\sum_{i=1}^nx_i=ki=1n?xi?=k的多元方程組解個數

類似于第二題,只不過每個數的限制不太一樣

容斥原理

無限制情況下(k+n?1n?1)\binom{k+n-1}{n-1}(n?1k+n?1?)

欽定一些xi≥ix_i\ge ixi?i

設限制的xi≥ix_i\ge ixi?iiii之和為sss

隔板法,方案數(k?s+n?1n?1)\binom{k-s+n-1}{n-1}(n?1k?s+n?1?)

容斥系數,限制的個數(?1)m(-1)^m(?1)m

s>ks>ks>k時對答案無貢獻,只需要計算[1,n][1,n][1,n]中選若干個數,和為s,s∈[1,k]s,s\in[1,k]s,s[1,k]??的個數

巧妙的構造方案:

  • 每一次給一段數都+1+1+1,或者都+1+1+1后再放一個111,排除掉出現n+1n+1n+1的情況

    這樣的構造可以構造出numi∈[1,n]num_i\in[1,n]numi?[1,n]?的所有子集

fi,j:f_{i,j}:fi,j?:iii個數和為jjj的方案數

  • iii個數全+1+1+1

    +fi,j?i+f_{i,j-i}+fi,j?i?

  • i?1i-1i?1個數+1+1+1,新增一個111

    +fi?1,j?i+f_{i-1,j-i}+fi?1,j?i?

  • 可能出現加111超過nnn的可能,強制前i?1i-1i?1個中有一個超成n+1n+1n+1

    ?fi?1,j?(n+1)-f_{i-1,j-(n+1)}?fi?1,j?(n+1)?

code

#include <cmath> #include <cstdio> #define int long long #define mod 1000000007 #define maxn 100005 int f[500][maxn]; int fac[maxn << 1], inv[maxn << 1];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans; }void init( int n ) {fac[0] = inv[0] = 1;for( int i = 1;i <= n;i ++ )fac[i] = fac[i - 1] * i % mod;inv[n] = qkpow( fac[n], mod - 2 );for( int i = n - 1;i;i -- )inv[i] = inv[i + 1] * ( i + 1 ) % mod; }int C( int n, int m ) {if( n < 0 || m < 0 || n < m ) return 0;else return fac[n] * inv[m] % mod * inv[n - m] % mod; }signed main() {int n, k;scanf( "%lld %lld", &n, &k );init( n + k );f[0][0] = 1;int lim = sqrt( k << 1 );for( int i = 1;i <= lim;i ++ )for( int j = i;j <= k;j ++ ) {f[i][j] = ( f[i][j - i] + f[i - 1][j - i] ) % mod;if( j <= n ) continue;else f[i][j] = ( f[i][j] - f[i - 1][j - n - 1] + mod ) % mod;}int ans = C( n + k - 1, n - 1 );for( int i = 1;i <= lim && i <= n;i ++ )for( int j = 1;j <= k;j ++ )if( i & 1 ) ans = ( ans - C( n + k - j - 1, n - 1 ) * f[i][j] % mod ) % mod;elseans = ( ans + C( n + k - j - 1, n - 1 ) * f[i][j] % mod ) % mod;printf( "%lld\n", ( ans + mod ) % mod );return 0; }

總結

以上是生活随笔為你收集整理的容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利二区 | 无码人妻精品一区二区50 | 国产九九精品视频 | 真实新婚偷拍xxxxx | 久久亚洲国产成人精品性色 | 国产成人精品一区 | 污污的网站在线观看 | 二级毛片在线观看 | 欧美黄色一级大片 | 5个黑人躁我一个视频 | 国产伦精品一区二区三区照片91 | 性色在线观看 | 国产福利视频在线观看 | a级黄色网| 天天曰夜夜操 | 日韩国产亚洲欧美 | 天天干夜夜欢 | 无码h黄肉3d动漫在线观看 | 国产美女极度色诱视频www | 日韩精品一线二线三线 | 黄色小视屏 | 亚洲天堂avav | 91色视频| 天干夜夜爽爽日日日日 | 日本ww色| 最新中文字幕免费 | 亚洲成熟少妇 | 免费成人美女在线观看 | 欧美一及片 | 91美女在线视频 | 国产日韩欧美精品一区 | 久久精品国产免费看久久精品 | 波多野结衣50连登视频 | 久久精品国产亚洲av高清色欲 | 加勒比综合网 | 内射中出日韩无国产剧情 | 狠狠干狠狠操视频 | 97射射 | 国产又粗又猛又黄 | 新版天堂资源中文8在线 | 欧美精品一区视频 | 国产又粗又长又硬免费视频 | 亚洲精品成人区在线观看 | 午夜精品区 | 3d动漫精品啪啪一区二区免费 | 中国第一毛片 | 91精品一区二区三区四区 | 久久国产精 | 2019最新中文字幕 | 久久久久99人妻一区二区三区 | 九色福利 | 免费毛毛片 | 少妇xxx| 开心激情网五月天 | 国产伦精品一区二区三区视频网站 | 欧美日韩一卡 | 一女双乳被两男吸视频 | 亚洲网址在线观看 | 日韩午夜剧场 | www嫩草| 91理论片午午伦夜理片久久 | 精品无码久久久久国产 | 九九九国产视频 | 钰慧的mv视频在线观看 | 中文字幕欧美日韩 | 日韩欧美的一区二区 | 久久一区二区三区四区 | 人成在线观看 | 国产精品2| 午夜在线你懂的 | 欧美爱爱网址 | 我们2018在线观看免费版高清 | 自拍视频一区 | 欧美日韩中文字幕一区 | 亚洲成人一区在线观看 | 欧美一级影院 | 国产aⅴ一区二区三区 | 国产一区二区在线精品 | 少妇人妻偷人精品无码视频 | 我爱av好色 | 欧美另类自拍 | 欧美一区二区三区啪啪 | 在线三区| 97在线观看视频免费 | 久久精品视频18 | 国产一区视频免费观看 | 亚洲精品天堂网 | 日本人和亚洲人zjzjhd | 成av人在线观看 | 国产精品国产三级国产aⅴ中文 | 91青青草| 久久理论电影 | 综合久久99 | 九九国产 | 91精品国产一区二区 | 大屁股白浆一区二区 | 国产精品无码一本二本三本色 | 少妇的性事hd | 黄色国产在线播放 |