sicily 1239. Smallest Differencev

原创 2015年11月19日 16:56:29

1239. Smallest Differencev

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Given a number of distinct decimal digits, you can form one integer by choosing a non-empty subset of these digits and writing them in some order. The remaining digits can be written down in some order to form a second integer. Unless the resulting integer is 0, the integer may not start with the digit 0.

For example, if you are given the digits 0, 1, 2, 4, 6 and 7, you can write the pair of integers 10 and 2467. Of course, there are many ways to form such pairs of integers: 210 and 764, 204 and 176, etc. The absolute value of the difference between the integers in the last pair is 28, and it turns out that no other pair formed by the rules above can achieve a smaller difference.

Input

The first line of input contains the number of cases to follow. For each case, there is one line of input containing at least two but no more than 10 decimal digits. (The decimal digits are 0, 1, ..., 9.) No digit appears more than once in one line of the input. The digits will appear in increasing order, separated by exactly one blank space.

Output

For each test case, write on a single line the smallest absolute difference of two integers that can be written from the given digits as described by the rules above.

Sample Input

1
0 1 2 4 6 7

Sample Output

28


题目分析

升序给出0到9间的若干个数,不重复
用若干位组成十进制数,剩余位也组成十进制数字,求使两个数的差的绝对值最小
注意0的特殊性,不能存在前缀零
剪枝有:只输入0时打印0,只输入两个数时,直接相减输出
其他情况用next_permutation直接暴力枚举
做差前确保str[0]和str[str.lenght()/2]不为'0'


#include <iostream>
#include <algorithm>
#include <cmath>

int main()
{
  int test;
  std::cin >> test;
  std::string line;
  getline(std::cin, line);
  while (test--) {
    getline(std::cin, line);
    if (line == "0") {
      std::cout << "0" << std::endl;
      continue;
    }
    if (line.length() == 3) {
      std::cout << line[2] - line[0] << std::endl;
      continue;
    }
    std::string str = "";
    for (int i = 0; i < line.length(); i += 2)
      str = str + line[i];
//std::cout << str << std::endl;
    int min = 44444;
    int astart = 0;
    int bstart = str.length()/2;
    do {
      if (str[astart] == '0' || str[bstart] == '0')
        continue;
      int a = 0, weight = 1;
      for (int i = bstart-1; i >= 0; --i) {
        a += (str[i] - '0') * weight;
        weight *= 10;
      }
      int b = 0;
      weight = 1;
      for (int i = str.length()-1; i >= bstart; --i) {
        b += (str[i] - '0') * weight;
        weight *= 10;
      }
      min = min < fabs(a-b) ? min : fabs(a-b);
//std::cout << a << "  " << b << "   " << min << std::endl;
    }  while (std::next_permutation(str.begin(), str.end()));
    std::cout << min << std::endl;
  }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

sicily题目分类

sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
  • u010858667
  • u010858667
  • 2013年09月05日 11:52
  • 2144

Sicily 1135 飞越原野

广度优先搜索,三维数组判重 #include #include #include using namespace std; struct Node { int x,y,p; }; ch...
  • Detective_Xin
  • Detective_Xin
  • 2013年11月22日 11:19
  • 1314

[sicily]部分题目分类

*************************程序设计题************************* sicily 1293, uva 100, pc 110101, 3n+1数链问题, 难...
  • luohuang0423
  • luohuang0423
  • 2015年09月24日 11:20
  • 777

中山大学Sicily在线测评系统题目分类

Classified Problems on Online Judge 练习题选自以下在线测评系统 * sicily: http://soj.me, 中山大学Sicily在线测评系统 ...
  • cuhkljt
  • cuhkljt
  • 2013年06月26日 21:39
  • 4813

sicily 简单哈希

sicily 1004. 简单哈希 原题: Description  使用链地址法(又称拉链法)可以解决Hash中的冲突问题。其基本思想是:将具有相同哈希地址的记录链成一个单链表,m个哈希地址就...
  • t6_17
  • t6_17
  • 2016年12月14日 21:26
  • 547

Find K-th Smallest Pair Distance:查找数组元素中差值第K大的两个元素的差值

Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai...
  • u013300579
  • u013300579
  • 2017年10月30日 17:29
  • 294

Sicily求A-B(也即求A对B的差集)

题目描述思路介绍:①使用vector存储AB ②使用unique与erase对AB分别进行去重 ③开辟一个标记数组,使用二重循环...
  • wyxwyx469410930
  • wyxwyx469410930
  • 2017年12月22日 00:29
  • 56

sicily 1215 脱离地牢

做Sicily 1215脱离地牢 这一题,一直Restrict function,都快崩溃了。 最后发现是内存泄露,就是new出来的东西没有及时delete导致的。 具体是在广度优...
  • chz429
  • chz429
  • 2014年12月27日 10:25
  • 625

sicily 1019(动态规划)

题目链接:sicily 1019 题目分析:恶心的一笔的一道题,不过确实是一道好题。给你一棵树,n个结点,结点间距离为1,每个结点有一个值,第一次走过某个节点获得该结点的值,问用m步遍历树可以获得值...
  • fuyukai
  • fuyukai
  • 2015年04月18日 07:19
  • 393

sicily 1156之约定俗成

这是题目,我就不黏贴了点击打开链接
  • xujqiao
  • xujqiao
  • 2014年07月24日 12:08
  • 295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sicily 1239. Smallest Differencev
举报原因:
原因补充:

(最多只允许输入30个字)