码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2718 (Smallest Different)

时间:2020-03-22 19:33:31      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:tin   getc   diff   类型   algo   etc   搜索   problem   span   

题目链接: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\n",ans);
}

// using namespace std;
int main(void){
    
    scanf("%d\n",&n);
    while(n--){
        ids=0;
        while((c=getchar())!=\n){
            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\n",ids);
    return 0;
}
View Code

 

2020-03-22

18:34:00

POJ 2718 (Smallest Different)

标签:tin   getc   diff   类型   algo   etc   搜索   problem   span   

原文地址:https://www.cnblogs.com/jaszzz/p/12547565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!