zoukankan      html  css  js  c++  java
  • hdu 2062搜索

    挺简单,直接上代码。

    /*
     * hdu2062/win.cpp
     * Created on: 2012-10-27
     * Author    : ben
     */
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <set>
    #include <map>
    #include <stack>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <functional>
    #include <numeric>
    #include <cctype>
    using namespace std;
    typedef long long LL;
    const int MAXN = 22;
    LL f[MAXN];
    int ans[MAXN], N;
    bool used[MAXN];
    void init() {
        f[0] = 0;
        for(int i = 1; i <= 20; i++) {
            f[i] = i * (f[i - 1] + 1);
        }
    }
    
    int getnum(int t) {
        int i = 1;
        while(t > 1 || used[i]) {
            if(!used[i]) {
                t--;
            }
            i++;
        }
        return i;
    }
    
    void dfs(int step, LL M) {
        if(M <= 0) {
            ans[step] = -1;
            return ;
        }
        if(step == N) {
            return ;
        }
        int t = 1;
        while(M > f[N - step - 1] + 1) {
            t++;
            M -= f[N - step - 1] + 1;
        }
        ans[step] = getnum(t);
        used[ans[step]] = true;
        dfs(step + 1, M - 1);
    }
    
    int main() {
    #ifndef ONLINE_JUDGE
        freopen("data.in", "r", stdin);
    #endif
        init();
        LL M;
        while(scanf("%d%I64d", &N, &M) == 2) {
            fill(used, used + MAXN, false);
            dfs(0, M);
            printf("%d", ans[0]);
            for(int i = 1; i < N; i++) {
                if(ans[i] > 0) {
                    printf(" %d", ans[i]);
                }else {
                    break;
                }
            }
            putchar('\n');
        }
    //    copy(f, f + 21, ostream_iterator<LL>(cout, "\t"));
        return 0;
    }
  • 相关阅读:
    SSL 1010——方格取数
    SSL 1558——科技庄园
    SSL 2295——暗黑破坏神
    SSL 2294——打包
    SSL 2293——暗黑游戏
    SSL 2305——竞赛总分
    SSL 1072——砝码称重
    SSL 2291——分组背包
    SSL 2290——潜水员
    SSL 2301——混合背包
  • 原文地址:https://www.cnblogs.com/moonbay/p/2743292.html
Copyright © 2011-2022 走看看