ハング電動ブラシOJタイトル(2062)

サブセットのシーケンス(判読不能)

件名の説明:

集計アンを考える= {1、2、...、N}。例えば、A1 = {1}、A3 = {1,2,3}。サブセットシーケンスは、非空部分​​集合のアレイとして定義されます。ソート辞書編集順にアンのすべてのサブセットsequece。あなたの仕事は、m番目のものを見つけることです。

入力

入力は、いくつかのテストケースが含まれています。各テストケースは、2つの数nとmで構成され(0 <N <= 20、0 <M <=アンのサブセットシーケンスの総数)。

出力

各テストケースに対しては、出力は、1つのラインのアンのm番目のサブセットシーケンスべきです。

サンプル入力

1 1 
2 1 
2 2 
2 3 
2 4 
3 10

サンプル出力

1 
1 
1 2 
2 
2 1 
2 3 1

その答えによって:

#include<stdio.h>
int main()
{
    int n,i,group;
    int s[21];        //每组首字母 
    __int64 m; 
    __int64 c[21]={0};     //每组个数 
   
    for(i=1;i<21;i++){
   	    c[i]=(i-1)*c[i-1]+1;
    }
	while(scanf("%d%I64d",&n,&m)!=EOF){
		for(i=0;i<21;i++){        //初始化首元素 
			s[i]=i;
		}
		while(n--&&m){
			if (group= m / c[n+1] + ((m % c[n+1]) ? 1 : 0))    //计算组数 
            {
                printf("%d", s[group]);
                for (i = (int)group; i <= n; s[i]=s[i+1], i++);     //删除首元素 
                m -= (group- 1) * c[i] + 1;            //计算在第几个 
                if(m==0){
				    printf("\n");	
				}else{
					printf(" "); 
				}
            }
		}
	} 
   
    return 0;
}

 

公開された76元の記事 ウォンの賞賛3 ビュー1862

おすすめ

転載: blog.csdn.net/ZhangShaoYan111/article/details/104320128