POJ 2718 Smallest Difference 枚举
2014-04-22 22:37
302 查看
http://poj.org/problem?id=2718
题目大意:
给你一些数字(单个),不会重复出现且从小到大。他们可以组成两个各个位上的数字均不一样的数,如 0, 1, 2, 4, 6 ,7可以组成10 和 2467,但最小的差值由204和176组成,差值为28,这题就是求最小的差值。
思路:
直接枚举即可。
注意不能有前导0,当只有两个数时。。。比如0 和2答案为2,分开讨论就是了。
题目大意:
给你一些数字(单个),不会重复出现且从小到大。他们可以组成两个各个位上的数字均不一样的数,如 0, 1, 2, 4, 6 ,7可以组成10 和 2467,但最小的差值由204和176组成,差值为28,这题就是求最小的差值。
思路:
直接枚举即可。
注意不能有前导0,当只有两个数时。。。比如0 和2答案为2,分开讨论就是了。
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int INF=0x3fffffff; int a[12],len; char c; int solve(int start,int en) { int res=0; for(int j=start;j<en;j++) { if(a[start]==0) return INF; res=res*10+a[j]; } return res==0? INF:res; } int main() { int T; scanf("%d",&T); getchar(); while(T--) { len=0; while(scanf("%c",&c),c!='\n') { if(c==' ') continue; a[len++]=c-'0'; } int ans=INF; if(len==2) ans=a[1]-a[0]; else do { int x=solve(0,len>>1); int y=solve(len>>1,len); int t=abs(x-y); if(t<ans && x!=INF && y!= INF) ans=t; x=solve(0,(len>>1)+1); y=solve((len>>1)+1,len); t=abs(x-y); if(t<ans && x!=INF && y!= INF) ans=t; }while(next_permutation(a,a+len)); printf("%d\n",ans); } return 0; }
相关文章推荐
- 【POJ】2718 - Smallest Difference(枚举全排列)
- POJ 2718 Smallest Difference 枚举
- POJ:2718 Smallest Difference(暴力枚举)
- POJ 2718 Smallest Difference(暴力枚举)
- 枚举搜索+贪心:POJ2718--Smallest Difference(解一)
- POJ-----2718---Smallest Difference---暴力
- POJ 2718 Smallest Difference (穷竭搜索)
- poj 2718 Smallest Difference
- POJ 2718 Smallest Difference (dfs)
- poj 2718 Smallest Difference 穷竭搜索之全排列
- poj 2718 Smallest Difference 【STL + dfs】
- POJ 2718 Smallest Difference
- poj 2718 Smallest Difference
- POJ 2718 - Smallest Difference(双DFS)
- POJ 2718 Smallest Difference
- POJ 2718 Smallest Difference 【DFS 穷竭搜索】
- POJ2718-Smallest Difference
- POJ 2718 Smallest Difference (dfs)
- poj 2718 Smallest Difference
- Smallest Difference(POJ-2718)