国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+組合數(shù)學(xué))

這篇具有很好參考價(jià)值的文章主要介紹了Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+組合數(shù)學(xué))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目

稱一個(gè)長為n的數(shù)列a是fancy的,當(dāng)且僅當(dāng):

1. 數(shù)組內(nèi)至少有一個(gè)元素在[x,x+k-1]之間

2. 相鄰項(xiàng)的差的絕對(duì)值不超過k,即Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+組合數(shù)學(xué)),組合數(shù)學(xué)(容斥原理),# 矩陣(快速冪/高斯消元/子矩陣),容斥,組合計(jì)數(shù),矩陣快速冪

t(t<=50)組樣例,每次給定n(1<=n<=1e9),x(1<=x<=40),

求fancy的數(shù)組的數(shù)量,答案對(duì)1e9+7取模

思路來源

靈茶山艾府群 && 官方題解

題解

看到至少的字眼,首先想到容斥,用總的減不滿足的,

本題中,合法方案數(shù)=[最小值<=x+k-1的方案數(shù)]-[最大值<x的方案數(shù)]

最小值<=x+k-1的方案數(shù)

第一個(gè)數(shù)字選0,后面每個(gè)數(shù)都有2k+1種選擇方式,最后把最小值往上平移到[0,x+k-1]之間

方案數(shù)為Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+組合數(shù)學(xué)),組合數(shù)學(xué)(容斥原理),# 矩陣(快速冪/高斯消元/子矩陣),容斥,組合計(jì)數(shù),矩陣快速冪

最小值<x的方案數(shù)

即長為n的數(shù)列,使用的值均在[0,x-1]的方案數(shù),

注意到x<=40,所以可以dp[i][j]表示長為i的數(shù)組最后一個(gè)是j的方案數(shù)

轉(zhuǎn)移時(shí),只要abs(j1-j2)<=k,就可以從j1轉(zhuǎn)移到j(luò)2,

構(gòu)造上述轉(zhuǎn)移矩陣,矩陣快速冪求出其n-1次冪,

由于長度為1時(shí)對(duì)應(yīng)的[0,x-1]的向量均為1,所以將每一行的和從答案中減掉即可文章來源地址http://www.zghlxwxcb.cn/news/detail-745067.html

代碼

// Problem: F. Fancy Arrays
// Contest: Codeforces - Educational Codeforces Round 157 (Rated for Div. 2)
// URL: https://codeforces.com/contest/1895/problem/F
// Memory Limit: 512 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define scll(a) scanf("%lld",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int mod=1e9+7;
int t,n,x,k;
int modpow(int x,int n,int mod){
	int res=1;
	for(;n;n>>=1,x=1ll*x*x%mod){
		if(n&1)res=1ll*res*x%mod;
	}
	return res;
}
struct mat{
    static const int N=42;
    ll c[N][N];
    int m,n;
    mat(){
    	memset(c,0,sizeof(c));
    	m=n=N;
    }
    mat(int a,int b):m(a),n(b){
        memset(c,0,sizeof(c));
    }
    void clear(){
		memset(c,0,sizeof(c));
    }
    void E(){
        int mn=min(m,n);
        for(int i=0;i<mn;i++){
            c[i][i]=1;
        }
    }
    mat operator *(const mat& x){
        mat ans(m,x.n);
        for(int i=0;i<m;i++)
            for (int k=0;k<n;k++)
                {
                    if(!c[i][k])continue;//小剪枝
                    for (int j=0;j<x.n;j++)
                    (ans.c[i][j]+=c[i][k]*x.c[k][j]%mod)%=mod;//能不取模 盡量不取模
                }
                    //這里maxn=2 故不會(huì)超過ll 視具體情況 改變內(nèi)部取模情況
        return ans;
    }
    friend mat operator^(mat x,ll n){//冪次一般為ll 調(diào)用時(shí)a=a^(b,n) 等價(jià)于a=b^n
        mat ans(x.m, x.m);
    	ans.E();
        for(;n;n>>=1,x=x*x){//x自乘部分可以預(yù)處理倍增,也可以用分塊加速遞推
            if(n&1)ans=ans*x;
        }
        return ans;
	}
};
int sol(){
	sci(n),sci(x),sci(k);
	int ans=1ll*(x+k)*modpow(2*k+1,n-1,mod)%mod;
	if(!x)return ans;
	mat a(x,x);
	rep(i,0,x-1){
		rep(j,0,x-1){
			if(abs(i-j)<=k)a.c[i][j]=1;
		}
	}
	a=a^(n-1);
	rep(i,0,x-1){
		int sum=0;
		rep(j,0,x-1){
			sum=(sum+a.c[i][j])%mod;
		}
		ans=(ans-sum+mod)%mod;
	}
	return ans;
}
int main(){
	sci(t); // t=1
	while(t--){
		pte(sol());
	}
	return 0;
}

到了這里,關(guān)于Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+組合數(shù)學(xué))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

    Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

    ?一開始肯定要排個(gè)序,b相同時(shí)t大的在前邊,不同時(shí)b大的在前面。 然后想最多只能選k個(gè)的限制,可以這樣想,每次用到的b只能用已選到的最小的值,那可以把每個(gè)b都枚舉一遍,然后每一次選時(shí)長最長的,且b大于等于當(dāng)前的b的那k個(gè)不就好了嗎,時(shí)間復(fù)雜度也才O(n),然

    2024年02月12日
    瀏覽(18)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—C)

    從1到9,每個(gè)數(shù)后面都可以加一個(gè)數(shù)構(gòu)成一個(gè)含有兩個(gè)數(shù)的質(zhì)數(shù),只需要從s[1]~s[9]中找到一個(gè)數(shù)與s[0]構(gòu)成質(zhì)數(shù)即可 觀察樣例即可發(fā)現(xiàn)兩個(gè)字符串只要在相同位置都有 01 存在就能成功實(shí)現(xiàn)轉(zhuǎn)換后兩個(gè)字符串相等 可以先假設(shè)字符串是可以成立的,那么接下來就判斷它什么時(shí)間是

    2024年02月10日
    瀏覽(22)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—D)

    從1到9,每個(gè)數(shù)后面都可以加一個(gè)數(shù)構(gòu)成一個(gè)含有兩個(gè)數(shù)的質(zhì)數(shù),只需要從s[1]~s[9]中找到一個(gè)數(shù)與s[0]構(gòu)成質(zhì)數(shù)即可 觀察樣例即可發(fā)現(xiàn)兩個(gè)字符串只要在相同位置都有 01 存在就能成功實(shí)現(xiàn)轉(zhuǎn)換后兩個(gè)字符串相等 可以先假設(shè)字符串是可以成立的,那么接下來就判斷它什么時(shí)間是

    2024年02月10日
    瀏覽(35)
  • Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思維)

    Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思維)

    C. Digital Logarithm 給兩個(gè)長度位 n n n 的數(shù)組 a a a 、 b b b ,一個(gè)操作 f f f 定義操作 f f f 為, a [ i ] = f ( a [ i ] ) = a [ i ] a[i]=f(a[i])=a[i] a [ i ] = f ( a [ i ]) = a [ i ] 的位數(shù) 求最少多少次操作可以使 a 、 b a、b a 、 b 兩個(gè)數(shù)組變得完全相同 性質(zhì): 對(duì)于任何數(shù),經(jīng)過兩次操作我們一定可以

    2024年02月20日
    瀏覽(18)
  • 【每日一題】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

    【每日一題】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

    ??博客主頁: PH_modest的博客主頁 ??當(dāng)前專欄: 每日一題 ??其他專欄: ?? 每日反芻 ?? C++跬步積累 ?? C語言跬步積累 ??座右銘: 廣積糧,緩稱王! 題目大意:給你一串由1、2、3組成的數(shù)組,讓你求一個(gè)最短的子串,要求這個(gè)子串包含1、2、3 題目鏈接:B. Ternary String

    2024年02月16日
    瀏覽(18)
  • Educational Codeforces Round 161 (Rated for Div. 2) E. Increasing Subsequences 動(dòng)態(tài)規(guī)劃逼近,二進(jìn)制拆分補(bǔ)充,注意嚴(yán)格遞增

    Problem - E - Codeforces 目錄 推薦視頻: 題意: 細(xì)節(jié)(我踩得沒什么價(jià)值的坑): 思路: 對(duì)樣例3 (X = 13)做解釋: —————— 總思路: —————— 動(dòng)態(tài)規(guī)劃逼近: —————— 二進(jìn)制拆分補(bǔ)充剩余: 核心代碼:? E_嗶哩嗶哩_bilibili 其實(shí)有一些細(xì)節(jié)說的不是特別清楚好

    2024年02月22日
    瀏覽(22)
  • Educational Codeforces Round 161 (Rated for Div. 2) E題 動(dòng)態(tài)規(guī)劃逼近,二進(jìn)制拆分補(bǔ)充,注意嚴(yán)格遞增strictly increasing

    Problem - E - Codeforces 目錄 推薦視頻: 題意: 細(xì)節(jié)(我踩得沒什么價(jià)值的坑): 思路: 對(duì)樣例3 (X = 13)做解釋: —————— 總思路: —————— 動(dòng)態(tài)規(guī)劃逼近: —————— 二進(jìn)制拆分補(bǔ)充剩余: 核心代碼:? E_嗶哩嗶哩_bilibili 其實(shí)有一些細(xì)節(jié)說的不是特別清楚好

    2024年01月24日
    瀏覽(17)
  • Codeforces Round 868 (Div. 2) F. Random Walk(樹上期望)

    Codeforces Round 868 (Div. 2) F. Random Walk(樹上期望)

    題目 n(n=2e5)個(gè)點(diǎn)的樹, 從起點(diǎn)s出發(fā),每次等概率選擇一條邊,隨機(jī)游走到相鄰點(diǎn) 若走到t,則停止,問每個(gè)點(diǎn)經(jīng)過的期望次數(shù),答案對(duì)998244353取模 思路來源 DLUT_Zeratul講解 題解 需要分成三部分考慮, ①s-t這條鏈,將這條鏈上的邊定向,經(jīng)過的次數(shù),正向邊=反向邊+1 ②對(duì)于

    2024年02月12日
    瀏覽(18)
  • Educational Codeforces Round 145 Div. 2 題解

    目錄 A. Garland(簽到) 題面翻譯 思路: 代碼 B. Points on Plane(數(shù)學(xué)) 題面翻譯 思路: 代碼 C. Sum on Subarray(構(gòu)造) 題面翻譯: 思路: 代碼 D. Binary String Sorting 題面翻譯 思路: 代碼 You have a garland consisting of?4?colored light bulbs, the color of the?i-th light bulb is?si. Initially, all the l

    2023年04月09日
    瀏覽(17)
  • Educational Codeforces Round 147 div2題解

    目錄 A. Matching(簽到) 思路: 代碼:? B. Sort the Subarray(簽到) 思路: 代碼: C. Tear It Apart(枚舉) 思路: 代碼: D. Black Cells(模擬) 思路: ?代碼一: 代碼二:(模仿自\\\"AG\\\"佬) An?integer template?is a string consisting of digits and/or question marks. A positive (strictly greater than?0) in

    2023年04月21日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包