UVA.129 Krypton Factor (搜索+暴力)

UVA.129 Krypton Factor (搜索+暴力)

题意分析

搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可。
注意的地方就是合法串的判断,根据后缀的规则来判断,枚举后缀长度[1,len/2],后缀中是否有重复子串,若是的话表明不是合法串。
还有一个注意的地方,每次递归调用时,序号就要+1,无论是回溯回来的递归,还是深度搜索的递归,因为没找到一组可行解,编号就要加一。原因是此题不是用递归深度来判断输出的。

代码总览

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#define INF 0x3f3f3f3f
#define nmax 100
#define MEM(x) memset(x,0,sizeof(x))
using namespace std;
int s[nmax];
int ans[nmax],n,a,cot;
bool isfind;
void output(int num)
{
    bool isnext = true;
    for(int ct = 1;ct<num;++ct){
        printf("%c",ans[ct]+'A'-1);
        if(ct%4 == 0 && ct % 64 != 0 && ct!=num-1){printf(" "); isnext = false;}
        else if( ct % 64 == 0) {printf("\n"); isnext = true;}
        else isnext = false;
    }
    if(!isnext) printf("\n");
    printf("%d\n",num-1);
}
void dfs(int num)
{
    if(isfind) return;
    if(cot == n){
        output(num);
        isfind = true;
        return;
    }
    for(int i = 1; i<=a;++i){
        ans[num] = i;
        bool legal = true;
        if(num != 1){
            //check
            // j 后缀长度
            for(int j = 1;j<=num/2;++j){
                int legal1 = true;// 当前后缀存在重复子串
                for(int k = 0;k<j;++k){
                    if(ans[num-k] != ans[num-j-k]) legal1 = false;
                }
                if(legal1){
                    legal = false;
                    break;
                }
            }
            if(isfind) return;
        }
        if(legal){
            cot++;
            dfs(num+1);
        }
    }

}
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%d%d",&n,&a) &&(n||a)){
        cot = 0;
        isfind = false;
        MEM(ans);
        dfs(1);
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ComponentFactory.Krypton是一个用于创建现代化和定制化用户界面的.NET组件库。它提供了一系列控件、工具和样式,可以帮助开发者创建专业的、美观的WinForms应用程序。 ComponentFactory.Krypton的主要特点包括: 1. 丰富的控件集合:ComponentFactory.Krypton提供了各种常用的WinForms控件,如按钮、文本框、下拉列表、网格视图等。这些控件具有现代化的外观和行为,并且可以非常容易地进行自定义和风格化。 2. 高度可定制性:ComponentFactory.Krypton允许开发者根据自己的需求和喜好对控件进行定制。它提供了丰富的样式和主题选项,可以在不改变代码的情况下改变应用程序的外观。开发者可以轻松地应用自定义样式、颜色和背景图像等来创建独特的用户界面。 3. 易于使用的设计器:ComponentFactory.Krypton提供了一个可视化的设计器,使开发者可以直观地设计和布局用户界面。设计器界面友好,支持拖放操作,简化了控件的创建和布局过程。 4. 良好的性能和可靠性:ComponentFactory.Krypton经过了精心设计和优化,具有良好的性能和可靠性。它在加载速度、内存消耗和响应时间等方面表现出色,可以应对大型和复杂的应用程序。 总之,ComponentFactory.Krypton是一个强大的.NET组件库,提供了丰富的控件和工具,可以帮助开发者快速创建现代化和定制化的WinForms应用程序。它的易用性、可定制性和良好的性能使其成为许多开发者的首选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值