p1066 2^k進製數
高精+組合數學
讀題可得,滿足條件的2^k進製數可分為2種
1.位數為2~w/k的
2.位數為w/k+1(w%k!=0)的
對於第一種,就是求2^k-1個數中不重複取 i 個的組合數,就是c(2^k-1,2)+...+c(2^k-1,w/k).
對於第二種,由於題目限制每一位嚴格小於右邊相鄰的一位,所以取數時只能越來越小,即c(2^k-1-i,w/k),其中 i 為最高位的所有可取值1~2^(w%k)-1
高精需要壓位,不然會mleqwq
#include#includeusing
namespace
std;
const
int wid=10000
; //壓4位
struct
data
data
operator + (data &tmp)
while(x) u.a[++u.len]=x%wid,x/=wid;
return
u; }
data
operator * (data &tmp)
u.a[i+len]+=x;
}while(u.a[u.len+1]) u.a[u.len+2]+=u.a[u.len+1]/wid,u.a[(u.len++)+1]%=wid;
return
u; }
void
print()
}}c[513][513
],ans;
intk,w,n,p;
intmain()
P1066 2 k進製數
設r是個2 k 進製數,並滿足以下條件 1 r至少是個2位的2 k 進製數。2 作為2 k 進製數,除最後一位外,r的每一位嚴格小於它右邊相鄰的那一位。3 將r轉換為2進製數q後,則q的總位數不超過w。在這裡,正整數k 1 k 9 和w k 30000 是事先給定的。問 滿足上述條件的不同的r共有多...
洛谷 P1066 2 k進製數
題目描述 設r是個2 k 進製數,並滿足以下條件 1 r至少是個2位的2 k 進製數。2 作為2 k 進製數,除最後一位外,r的每一位嚴格小於它右邊相鄰的那一位。3 將r轉換為2進製數q後,則q的總位數不超過w。在這裡,正整數k 1 k 9 和w k w span 30000 是事先給定的。問 滿足...
k進製數交換
問題進入 k進製數的數字交換問題,就是給出乙個k進製的數,求出其中任意兩個數字交換後的大小 我們先以十進位制數123為例,假如交換第一位和第二位變成213。那麼這兩個數之間存在什麼關係呢,我們注意到百位上本來是1,變成了2之後原數就要增加 2 1 100 十位上本來是2,變成1之後原數就要增加 1 ...