问题 1117: K-进制数
#include<stdio.h>
long long solve(int x,int y){
if(x==1) return y-1;
if(x==2) return y*(y-1);
return (y-1)*(solve(x-1,y)+solve(x-2,y));
}
int main(){
int n,k;
scanf("%dd %d",&n,&k);
printf("%lld\n",solve(n,k));
return 0;
}
#include<iostream>
using namespace std;
int total;
int n,k;
char a[20];
void dfs(int cur){
if(cur==n)
total++;
else{
for(int i=0;i<k;i++){
char tmp=i+'0';
if((cur==0&&tmp=='0')||(a[cur-1]=='0'&&tmp=='0'))
continue;
a[cur]=tmp;
dfs(cur+1);
}
}
}
int main(){
cin>>n>>k;
dfs(0);
cout<<total;
return 0;
}
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
long C(int n,int m){
int i;
long sum=1;
for(i=1;i<=m;i++)
sum*=(n+i);
for(i=1;i<=m;i++)
sum/=i;
return sum;
}
int main(){
int k,w,maxx;
long long s=0;
cin>>k>>w;
maxx=pow(2.0,k)-1;
for(int i=2;i*k<=w;i++)
s+=C(maxx-i,i);
if(w%k){
int t=w%k,maxx1;
maxx1=pow(2,t)-1;
for(int i=1;i<=maxx1;i++){
s+=C(maxx-i-w/k,w/k);
}
}
cout<<s<<endl;
return 0;
}