POJ 2718 (Smallest Different)

Posted jaszzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2718 (Smallest Different)相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=2718

 

题意:

将所给出的所有数字排列组合生成两个数,使其差的绝对值最小。求最小值。

 

这是一道穷竭搜索类型的题目,难度不大,还学到了 next_permutation 函数,

写好了一个代码后提交却是TLE!太搞人心态了,修改后有时报错,不得不说小白太辣鸡。。

这道题的坑就在于对输入数字为1和2特殊情况的单独列取

 

ac代码:

技术图片
#include <iostream>
#include <algorithm>
#include <cstdio>

int n,ids;
int s[15];
char c;

using namespace std;

int make_num(int i,int j){
    int x=0;
    for(int k=i;k<j;k++){
        x*=10;
        x+=s[k];
    }
    return x;
}

void solve(){
    int ans=0x3f3f3f3f;
    int k=ids/2;

    do{
        if(s[0]==0||s[k]==0)    continue;

        int x=make_num(0,k);
        int y=make_num(k,ids);
        ans=min(ans,abs(x-y));
    }while(next_permutation(s,s+ids));
    printf("%d
",ans);
}

// using namespace std;
int main(void){
    
    scanf("%d
",&n);
    while(n--){
        ids=0;
        while((c=getchar())!=
){
            if(c!= )    s[ids++]=c-0;
        }
        if(ids==1)
            cout<<s[0]<<endl;
        else if(ids==2)
            cout<<abs(s[0]-s[1])<<endl;
        else{solve();}        
    }
    // printf("%d
",ids);
    return 0;
}
View Code

 

2020-03-22

18:34:00

以上是关于POJ 2718 (Smallest Different)的主要内容,如果未能解决你的问题,请参考以下文章

poj2718 Smallest Difference

穷竭搜索: POJ 2718 Smallest Difference

POJ 2718 Smallest Difference

POJ - 2718Smallest Difference(搜索 )

Smallest Difference POJ 2718(搜索)

POJ 2718 Smallest Difference 未AC 《挑战程序设计竞赛》