POJ2718 Smallest Difference(枚举,水)

分析:
注意的就是特殊状态的考虑,
一个是前导0要考虑,
还有一个就是如果字符串只有2位,比如01,那么这个时候前导0是可以的,划分为0和1,差值是1.开始没考虑到这点,WA了两回。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define maxn 1000
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int T,A[maxn];
int a,b,Min;
char ss[maxn];
int zh(int x,int y){
//  cout<<x<<" "<<y<<endl;
    int res=0,ans=1;
    for(int i=x;i<=y;i++){
        res=res+A[i]*ans;
        ans*=10;
    }
    return res;
}
int main(){
    cin>>T;
    getchar();
    while(T--){
        int len,q=0;
        Min=inf;
        gets(ss);
        len=strlen(ss);
    //  cout<<len<<endl;    //把空格读进去了 
        for(int i=0;i<len;i++){
            if(ss[i]>='0'&&ss[i]<='9')
                A[q++]=ss[i]-'0';
        }

        do{
            if(A[q/2-1]==0||A[q-1]==0 &&q>2) continue;
            a=zh(0,q/2-1);  
            b=zh(q/2,q-1);
            Min=min(abs(a-b),Min);
        }while(next_permutation(A,A+q)); 
        cout<<Min<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81699837