牛客練習賽32 Phrase String(簽到題)
阿新 • • 發佈:2018-12-09
連結:https://ac.nowcoder.com/acm/contest/272/A
來源:牛客網
題解:wa了一發,a*=2的時候忘了mod
一種情況是k<v:
把二進位制放一個數組裡,按照最優處理陣列資訊(初始化全為0,跟題上的二級制顯示恰好相反,從陣列下標1開始,對稱更改陣列元素為1,這樣能使n最小),完了二級制轉換成十進位制。
另一種是 k>=v:
陣列全是1,直接二進位制轉換十進位制即可。
具體看程式碼,qwq
ac程式碼
#include <iostream> #include <bits/stdc++.h> using namespace std; typedef long long ll; ll mod=1e9+7; const ll maxn=1e5+5; ll s[maxn]; int main(){ ll v,k; cin>>v>>k; if(k>=v){ ll ans=0; ll a=1; while(k--){ ans+=a; ans%=mod; a=a*2%mod; } cout<<ans<<endl; } else{ ll ans=0; ll temp=v-k; ll cnt=temp/2; ll i=1; ll tp=v; while(cnt--){ s[i]=1; s[tp-1-i]=1; i++; } ll a=1; for(ll i=v-1;i>=0;i--){ if(!s[i]){ ans+=a; ans%=mod; } a=a*2%mod; } cout<<ans<<endl; } return 0; }
題目描述
給出v, k,請你找到最小的正整數n,滿足:
n的二進位制表示下存在一個長度為v的迴文串,該回文串首尾都是1且n的二進位制表示中至少有k個1。保證v,k均為偶數!
由於n可能很大,你只需要輸出對取模的結果。
輸入描述:
兩個整數v, k。保證v,k均為偶數!
輸出描述:
一個整數,表示n對取模的結果。
示例1
輸入
6 4
輸出
45
說明
樣例的構造方法為:101101
示例2
輸入
2 4
輸出
15
說明
最優的構造方法為:1111
備註:
。