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

Smallest Difference POJ 2718(搜索)

时间:2019-08-22 22:21:01      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:tor   const   cstring   getch   amp   algo   --   scan   i++   

原题

题目链接

题目分析

题目要求将一组数组成两个数,注意不能有前导零,要求差绝对值最小, 所以要取两个位数最接近的数来做差,然后搜就完事了.搜法可以用全排列搜,由于只取两个数,就可以直接取前half个数作为一个数,剩下的作为一个数,做差就行了,这样全排列刚好能遍历所有情况.

代码

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <utility>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <cstring>
 7 #include <string>
 8 #include <vector>
 9 #include <stack>
10 #include <queue>
11 #include <map>
12 #include <set> 
13 
14 using namespace std;
15 const int INF=0x3f3f3f3f;
16 
17 int num[20];
18 int ans;
19 
20 void solve(int n)
21 {
22     do
23     {
24         if(num[0]||n==2||n==3)
25         {
26             int mid=n/2;
27             if(num[mid]||n==2)
28             {
29                 int x=num[0],y=num[mid];
30                 for(int i=1;i<mid;i++) x=x*10+num[i];
31                 for(int i=mid+1;i<n;i++) y=y*10+num[i];
32                 ans=min(ans,abs(x-y));
33             }
34         }
35     }while(next_permutation(num,num+n));
36 }
37 
38 int main()
39 {
40 //    freopen("black.in","r",stdin);
41 //    freopen("black.out","w",stdout);
42     int T;
43     cin>>T;
44     getchar();
45     while(T--)
46     {
47         ans=INF;
48         char x;
49         int cnt=0;
50         while(~scanf("%c",&x)&&x!=\n) if(x>=0&&x<=9) num[cnt++]=x-0;
51         sort(num,num+cnt);
52         solve(cnt);
53         cout<<ans<<endl;
54     }
55     return 0;
56 }

 

Smallest Difference POJ 2718(搜索)

标签:tor   const   cstring   getch   amp   algo   --   scan   i++   

原文地址:https://www.cnblogs.com/VBEL/p/11396859.html

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