uva 129

暴力求解

大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易

求字典序第n困难的串……

大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++

总之先记着吧……

最后输出格式……

uva 129

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <cctype>
#include <string>
#include <malloc.h>
#include <queue>
#include <map>

using namespace std;
const int INF = 0xffffff;
const double esp = 10e-8;
const double Pi = 4 * atan(1.0);
const int Maxn = 200 + 10;
const int mod = 10000007;
const int dr[] = {1,0,-1,0,-1,1,-1,1};
const int dc[] = {0,1,0,-1,1,-1,-1,1};
//int dir2[8][2] = {{-1,0},{0,-1},{-1,1},{1,-1},{-1,-1},{1,0},{0,1},{1,1}};

int n,L;
int a[1000];
int tot;

bool dfs(int cur){
  if(tot++ == n){
    for(int i = 0;i < cur;i++){
        if(i && i % 4 == 0){
            if(i % (16*4) == 0){
                cout << endl;
                //cout << "$$$$";
            }
            else
                cout << ' ';
        }
        cout << char(a[i] + 'A');
    }
    cout << endl;
    cout << cur << endl;
    return 0;
  }
  for(int i = 0;i < L;i++){
    a[cur] = i;
    bool ok = 1;
    for(int j = 1;j * 2 < cur+2;j++){
        bool flag = 1;
        for(int k = 0;k < j;k++){
            if(a[cur-k] != a[cur-k-j]){
                flag = 0;
                break;
            }
        }
        if(flag){
            ok = 0;
            break;
        }
    }
    if(ok){
        if(!dfs(cur+1)){
            return 0;
        }
    }
  }
  return 1;
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("inpt.txt","r",stdin);
#endif
    while(cin >> n >> L){
        if(!n && !L)
            break;
        tot = 0;
        dfs(0);
    }
    return 0;
}
View Code

回家一直在玩,好难过……!!!!

以后要加油……!!!

原文地址:https://www.cnblogs.com/hanbinggan/p/4284296.html