Smallest Difference:POJ - 2718(全排列)

标签: stl poj acm
191人阅读 评论(0) 收藏 举报
分类:

题目链接:https://vjudge.net/contest/152839#problem/E

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(DFS或者贪心)

题目链接:http://poj.org/problem?id=2718 就是求给n个数字,n小于10,然后问组成两个数差值最小是多少,可以用dfs,但是做的时候想到贪心,但是偶数的情况我没有...
  • u012762625
  • u012762625
  • 2015-06-23 20:21:47
  • 556

poj 2718 Smallest Difference

题目链接:点击打开链接 题意:有一列数,对其任意分成两组,每组按一定顺序可以组成一个数。             问得到的两个数的差最小是多少。 要想两个数的差最小,就是对半分,...
  • u012841845
  • u012841845
  • 2013-12-12 23:58:23
  • 1891

POJ-2718-Smallest Difference

这个题意其实不难,就是说给你一些数,然后要求你使用这些数字组成2个数,然后求他们的差值最小。 思路: 我用的双重DFS做的,速度还比较快,其中有一个很重要的剪枝,若当前搜索的第二个数后面全部补零与...
  • z309241990
  • z309241990
  • 2014-02-20 12:53:37
  • 3271

poj 2718

首先可以想到,这两个数必定是用各一半数量的数字组成的数,如给出6个数,把这6个数分为两组,每组3个,这样组成的数字的差必定比其他方式小。接下来的任务就是穷举所有可能出现的组合,并求出最小差。在这里可以...
  • riverflowrand
  • riverflowrand
  • 2016-09-22 15:34:54
  • 149

POJ2718【DFS】

题意: 给你0到9之间的数,然后让你搞成两个数,求一个最小差异值(被组合的数不允许出现前导0) 思路:最小差异那么肯定是有一个整数长n/2,另一个长n-n/2,搜一下就好了。code:#inclu...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2016-06-03 13:53:39
  • 256

POJ2718---Smallest Difference

题目大意:输入一串数字, 将其分为两组,每组随机搭配,组成一个整数,整数的不能以0开头,除非只有个位,求两个整数差的最小值 分析:DFS暴搜掉。很容易想到一个整数的位数为n/2,另一个为n-n/2时...
  • hhhhhhj123
  • hhhhhhj123
  • 2015-03-09 23:03:13
  • 407

poj2718

Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 486...
  • zhang_letian
  • zhang_letian
  • 2015-01-27 20:47:42
  • 536

poj 2718

用next_permutation就行 #include #include #include #include #include using namespace std; int main() { ...
  • qq_36651153
  • qq_36651153
  • 2018-01-24 19:09:24
  • 5

POJ 2718

大水题啊。。 #include #include #include using namespace std; int a[10001],cnt; int ab(int x) { if(x>=...
  • yzllz001
  • yzllz001
  • 2015-08-08 16:16:46
  • 475
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 894
    排名: 5万+