CF 285D
打表,我们发现n=16,所以我们可以先固定a=[1,…n],然后我们计算对应的B的数量,之后乘以n!
void solve(){
vector<ll>a(17);
a[1]=1;
a[3]=3;
a[5]=15;
a[7]=133;
a[9]=2025;
a[11]=37851;
a[13]=1030367;
a[15]=36362925;
vector<ll>fac(17);
fac[0]=1;
for(int i=1;i<fac.size();++i){
fac[i]=(fac[i-1]*i%MOD);
}
int n;
cin>>n;
cout<<(a[n]*fac[n])%MOD<<'\n';
return;
}
CF 279E
对于 ${000100}$来说,需要一次操作
对于 ${001110}$来说,需要两次操作
那么我们就按这个逻辑计算,每次把’1’前推即可
void solve(){
string s;
cin>>s;
s='0'+s;
int ans=0;
for(int i=s.size()-1;i;--i){
if(s[i]=='1'){
if(s[i-1]=='1')s[i]='0',s[i-1]='*';
else ++ans;
}
else if(s[i]=='*'){
if(s[i-1]=='1')s[i]='0',s[i-1]='*';
else ++ans,s[i]='0',s[i-1]='1';
}
}
if(s[0]=='1')++ans;
cout<<ans<<'\n';
return;
}