2020湖南程式設計競賽 C題題解

2021-10-25 00:22:45 字數 883 閱讀 6157

題意:給乙個01串,其中一些位置是?,可以變成1或0,有一種操作,

將01串相鄰位置兩兩相減的絕對值形成乙個新陣列,比如 1 0 1可以變成 1 1,問有多少種填充?的方案使得01串在經過n-1次操作後的值為1 。

題解:

相鄰位置兩兩相減的絕對值就是這兩個數的異或值,最後可以發現,第i位的數對最後的結果的貢獻為c(n-1,i-1)次,因此當c(n-1,i-1)為偶數時,該位上的數不需要考慮,反之則要考慮,我們可以統計出有多少個問號在無貢獻位,假設有k個,這些問號可以為1也可以為0,則方案數為2^k,再算出有多少個問號在有貢獻位,最後算出這些問號需要放幾個1才能使得結果為1的方案數乘上之前的2 ^k便是答案。

**:

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e6+

5,mod=

1e9+7;

char s[maxn]

;int vis[maxn]

;ll fac[maxn]

;void

cal(

)ll qpow

(ll a,ll b)

ll c

(ll n,ll m)

intmain()

else

}

ll ca=0;

if(ans==1)

}else

} ll res=ca*sum%mod;

cout<}}

2023年湖南省程式設計競賽E題 最短的名字

解題報告 輸入n個字串,讓你求出可以用來區別這些字串的最少的字首總共有多少個字母。可以區別是指每個字串都取乙個自己的字首,同時保證所有取的這些字首沒有完全相同。這題用字典樹可以做,就是輸入的時候把所有的字串都插入到字典樹中,最後把所有被走過不止一次的節點的值都加起來,每個節點的值表示這個節點被走過多...

2018湖南省程式設計競賽E題 動態開點線段樹

e.grid 省賽時沒寫出這個題,確實是線段樹水平太菜了,現在又想到了這個題,我靠水題。思路 這個題說白了就是求最大1 到1e9這個區間有多少個點被覆蓋,普通線段樹空間肯定不行,不過可以用動態開點解決,每次更新最多新花幾十個節點的空間,1e5次更新,最多隻需幾百萬的空間足夠,解決了這個問題就是水題了...

牛客 程式設計題 組隊競賽c

牛牛舉辦了一次程式設計比賽,參加比賽的有3 n個選手,每個選手都有乙個水平值a i.現在要將這些選手進行組隊,一共組成n個隊伍,即每個隊伍3人.牛牛發現隊伍的水平值等於該隊伍隊員中第二高水平值。例如 乙個隊伍三個隊員的水平值分別是3,3,3.那麼隊伍的水平值是3 乙個隊伍三個隊員的水平值分別是3,2...