1 条题解
-
0
C :
#include "stdio.h" int n,l,m; int a[32]; int C(int n,int a) { int i,j; long long s; if(a<n-a) a=n-a; s=1,j=2; for(i=a+1;i<=n;i++) { s*=i; while(j<=n-a&&s%j==0) { s/=j; j++; } } return s; } int F(int d) { int i,s; s=0; for(i=0;i<=l&&i<d;i++) s+=C(d-1,i); return s; } void print() { int i; for(i=n-1;i>=0;i--) printf("%d",a[i]); printf("\n"); } int main() { int i,t; scanf("%d%d%d",&n,&l,&m); for(i=n;i>=1;i--) { if(m==1||m==2) { a[0]=m-1; break; } t=F(i); if(t<m) { a[i-1]=1; l--; m-=t; } } print(); return 0; }C++ :
#include<cstdio> using namespace std; int f(int aa,int bb) { int ll=1; while(bb) { if(bb&1) ll=ll*aa; aa=aa*aa; bb>>=1; } return ll; } int main() { int N,L,i,j,k,ss; scanf("%d %d %d",&N,&L,&i); ss=f(2,L+1)-1; if(i<=ss) { int q=i-1,c[35]={0},qq=N; while(q) { c[qq-1]=q%2; q/=2; qq--; } for(k=0;k<N;k++) printf("%d",c[k]); return 0; } for(j=ss+1;;j++) { int t=j,a[35]={0},h=N,count=0; while(t) { a[h-1]=t%2; t/=2; h--; } for(k=0;k<N;k++) { if(a[k]==1) count++; } if(count>L) continue; else { ss++; if(ss==i) { for(k=0;k<N;k++) printf("%d",a[k]); return 0; } } } }Pascal :
program kimbits; var pos:array[0..35] of longint; f:array[0..35,0..35] of longint; i,j,l,n,k:longint; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; procedure comeout(a,b,c:longint); var tip:longint; begin if a=0 then exit; tip:=f[a-1,b]; if tip<c then begin write('1'); comeout(a-1,b-1,c-tip); end else begin write('0'); comeout(a-1,b,c); end; end; begin readln(n,l,i); for k:=0 to n do f[k,0]:=1; for k:=0 to l do f[0,k]:=1; for k:=1 to n do for j:=1 to l do f[k,j]:=f[k-1,j]+f[k-1,j-1]; comeout(n,l,i); end.
- 1
信息
- ID
- 4477
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者