日韩性视频-久久久蜜桃-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」逆序对的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲一区二区天堂 | 午夜资源网 | 毛茸茸亚洲孕妇孕交片 | 美女又爽又黄 | 欧美福利视频导航 | 久久高清内射无套 | 亚洲综合一区在线观看 | 亚洲国产情侣 | 日韩视频一区二区三区在线播放免费观看 | 免费的污网站 | 快灬快灬一下爽69 | 国产午夜小视频 | 国产精品一级 | av大全网站| 中文字幕影院 | 久久久久久久亚洲av无码 | 在线免费三级 | 97超碰免费在线 | 97精品超碰一区二区三区 | 少妇熟女高潮流白浆 | 亚州av在线 | 久久久精品久久久 | 日韩一区二区三区在线 | 国产精品一区二区三区四区五区 | 国产女人18毛片 | 青春草在线视频免费观看 | 福利一区二区在线观看 | 求一个黄色网址 | 亚洲free性xxxx护士白浆 | 亚洲乱码国产乱码精品精 | 欧美在线精品一区 | 2021久久 | 青娱乐免费在线视频 | 97超碰国产精品无码蜜芽 | 成人在线h | 亚洲一区你懂的 | 日韩欧美国产成人 | 国产第四页 | 精品一区二区三区免费毛片爱 | 国产盗摄一区二区三区 | 日韩怡红院 | 手机在线中文字幕 | 性史性dvd影片农村毛片 | 日本一区二区三区视频免费看 | 国产h片在线观看 | 羽月希奶水一区二区三区 | 国产性在线 | a级黄色网| 开心激情站 | 中文字幕一区电影 | 天天干人人干 | 精品人妻一区二区三区免费 | 黄片毛片在线观看 | 亚洲精品喷潮一区二区三区 | 激情丁香| 狠色综合7777夜色撩人 | 欧美日韩另类视频 | 亚洲黄色a | 天天操天天干天天舔 | 欧美性猛交69 | 超碰97av | 91高清视频免费观看 | 国产情侣一区二区三区 | 九一精品视频 | 亚洲色图清纯唯美 | 国产第一页在线播放 | 精品一区二区久久久久久久网站 | 人妻少妇精品中文字幕av蜜桃 | 亚洲美女自拍视频 | 亚洲欧美日韩在线播放 | 成人狠狠干 | 日韩电影在线一区 | 成人羞羞网站 | 亚洲清纯国产 | 国产91色在线 | 福利一区在线观看 | 国产视频在线播放 | 成人91网站 | 丝袜 中出 制服 人妻 美腿 | 在线观看免费观看在线 | 男受被做哭激烈娇喘gv视频 | 福利视频在线播放 | 黄色短视频在线播放 | 久久欧美 | 一女三黑人理论片在线 | 午夜精品三级久久久有码 | 婷婷第四色 | 青青草自拍偷拍 | 人人看超碰 | av怡红院 | 国产成人97精品免费看片 | 91色| 51成人精品网站 | 欧美a v在线播放 | 荡女精品导航 | 黑丝少妇喷水 | 99午夜视频 | 午夜欧美福利 | 亚洲av成人无码一区二区三区在线观看 |