当前位置: 代码迷 >> 综合 >> POJ2718 Smallest Difference(枚举,水)
  详细解决方案

POJ2718 Smallest Difference(枚举,水)

热度:105   发布时间:2023-11-08 15:46:51.0

分析:
注意的就是特殊状态的考虑,
一个是前导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;
}
  相关解决方案