Smallest Difference:POJ - 2718(全排列)
2017-03-06 19:58
295 查看
题目链接:https://vjudge.net/contest/152839#problem/E
题目大意:给你一串数字,数字是0到9之间的数,数字个数不能超过十个,把他们组成两个数,要求差值的绝对值最小,,,,
思路:由于题目给的数据太水,因此可以用全排列,,暴力出差值的绝对值最小,,
stl里面的全排列的用法如下:http://jingyan.baidu.com/article/63acb44a90370061fcc17e18.html
代码:
STL的全排列
好久没写博客了,这周打acm比赛秃了,这题水题也没能做出来,,,题目大意:给你一串数字,数字是0到9之间的数,数字个数不能超过十个,把他们组成两个数,要求差值的绝对值最小,,,,
思路:由于题目给的数据太水,因此可以用全排列,,暴力出差值的绝对值最小,,
stl里面的全排列的用法如下:http://jingyan.baidu.com/article/63acb44a90370061fcc17e18.html
代码:
#include <iostream> #include <cstdio> #include <string> #include <algorithm> #include <set> #include <cstring> using namespace std; int a[20]; int main() { int cases; cin>>cases; getchar(); for(int i=0;i<cases;i++) { int l=0; char s[30]; gets(s); int L=strlen(s); for(int i=0; i<L; i+=2) { a[l++]=s[i]-'0'; } sort(a,a+l); int ans,mi=10000000; do { int sum1=0,sum2=0; if((a[0]==0)||(a[l/2]==0&&l>2)) continue; for(int i=0;i<l/2;i++) sum1=sum1*10+a[i]; for(int j=l/2;j<l;j++) sum2=sum2*10+a[j]; ans=abs(sum1-sum2); mi=min(ans,mi); } while(next_permutation(a,a+l)); cout<<mi<<endl; } return 0; }
相关文章推荐
- poj 2718 Smallest Difference 穷竭搜索之全排列
- 【POJ】2718 - Smallest Difference(枚举全排列)
- POJ 2718 Smallest Difference(暴力,全排列,next_permutation)
- poj 2718 Smallest Difference 【dfs(全排列变形题)】
- POJ 2718 Smallest Difference
- Smallest Difference(POJ 2718)
- POJ 2718 Smallest Difference 笔记
- POJ 2718 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 [dfs] 《挑战程序设计竞赛》2.1
- POJ 2718 - Smallest Difference(双DFS)
- POJ 2718 Smallest Difference【DFS】
- poj 2718 Smallest Difference 【STL + dfs】
- [POJ](2718)Smallest Difference ---- 穷竭搜索
- POJ 2718 Smallest Difference 【DFS 穷竭搜索】
- 刷题——Smallest Difference POJ - 2718