地址:http://acm.hdu.edu.cn/showproblem.php?pid=2184
题意:中文。。。就是递归了。
代码:
1 # include <stdio.h> 2 3 4 int n ; 5 long long m ; 6 7 8 int pil[3][70] ; 9 10 11 void gao(int a[], int b[], int c[]) 12 { 13 long long mid = (1LL << (n-1)) ; 14 if (n == 0) return ; 15 if (m >= mid) 16 { 17 c[++c[0]] = n-- ; 18 m -= mid ; 19 gao(b,a,c) ; 20 } 21 else 22 { 23 a[++a[0]] = n-- ; 24 gao(a,c,b) ; 25 } 26 } 27 28 29 void Print() 30 { 31 int i, j ; 32 for (i = 0 ; i < 3 ; i ++) 33 { 34 printf ("%d", pil[i][0]) ; 35 for (j = 1 ; j <= pil[i][0] ; j++) 36 printf (" %d", pil[i][j]) ; 37 printf ("\n") ; 38 } 39 } 40 41 42 int main () 43 { 44 int T ; 45 scanf ("%d", &T) ; 46 while (T--) 47 { 48 scanf ("%d %I64d", &n, &m) ; 49 pil[0][0] = pil[1][0] = pil[2][0] = 0 ; 50 gao(pil[0], pil[1], pil[2]) ; 51 Print() ; 52 } 53 return 0 ; 54 }