POJ 2718 暴力
来源:互联网 发布:剑灵捏脸数据图下载 编辑:程序博客网 时间:2024/05/21 07:06
题意
- 给你一个0-9的串,挑其中一部分的数字排列成一个数,其它数字排列成一个数(两个数都不能有前导0)
- 问你这两个数差的绝对值最小是多少
思路
- n很小,2-10,数字不会重复出现,直接暴力枚举即可
- 注意,不能复杂度过高,稍微有些技巧的就是两个数的位数应该尽可能接近,即都是n/2最好
- 所以枚举全排列,计算下在n/2的位置前后两个数差是几即可
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <string>using namespace std;const int maxn = 12;const int inf = 0x3f3f3f3f;int a[maxn];int n;int ans = inf;int cal(int inx){ int num1 = 0, num2 = 0; for (int i=0;i<inx;i++){ num1 *= 10; num1 += a[i]; } for (int i=inx; i < n; i++){ num2 *= 10; num2 += a[i]; } return abs(num1 - num2);}void dfs(int dep){ if (dep == n){ if (n > 3 && a[0] == 0){ return; } int index = n / 2; if (n >= 3 && a[index] == 0){ return; } ans = min(cal(index), ans); return; } for (int i=dep;i<n;i++){ swap(a[i], a[dep]); dfs(dep + 1); swap(a[dep], a[i]); }}int main(){ int T; char str[30]; cin>>T; cin.getline(str, 1); while(T--){ ans = inf; string s; cin.getline(str, 30); s = str; n = s.length() / 2 + 1; for (int i=0;i<s.length();i+=2){ a[i/2] = int(s[i] - '0'); } dfs(0); cout << ans << endl; } return 0;}
阅读全文
0 0
- POJ 2718 暴力枚举
- poj 2718 暴力dfs
- POJ 2718 暴力
- POJ-----2718---Smallest Difference---暴力
- Smallest Difference (poj 2718 暴力枚举)
- poj 2718 Smallest Difference (STL 暴力枚举)
- POJ:2718 Smallest Difference(暴力枚举)
- POJ 2718 Smallest Difference(暴力枚举)
- POJ 3522 暴力+图论
- POJ 1142 暴力!
- POJ 3697 BFS暴力
- poj 3102(暴力枚举)
- poj 3080 KMP+暴力
- poj 1247 暴力
- POJ 1380 暴力搜索
- POJ 1050 暴力
- POJ 1125 暴力+Dijkstra
- poj-1691-暴力DFS
- C#不用ArcEngine,生成Shp文件(六) 源码
- Zookeeper在Windows与Linux下的安装
- gets
- 简单的可视化日历系统
- 3路排序算法
- POJ 2718 暴力
- 自动化测试学习
- springmvc之Jackson实现po对象与Json字符串的互转
- 关于弹性布局flex属性详解
- Android中Recyclerview使用12----实现瀑布流样式
- 6个轻松用好大数据的绝密秘籍
- Unity刚体、碰撞器、实验和总结
- 数据结构-二叉堆
- 飞秋(FeiQ)关闭好友上下线提示功能