URAL 1095 Nikifor 3 (注意读题)
来源:互联网 发布:华为研发收入 知乎 编辑:程序博客网 时间:2024/06/09 17:11
题目:http://acm.timus.ru/problem.aspx?space=1&num=1095
题意:
给你N个正整数,它们都含有数码1、2、3、4,不超过20位,要求你调整每个正整数中数字的顺序,使它能被7整除。
分析:
做这题的时候没看清题意,没看到都含有1,2,3,4,用的记忆化搜所~~当然T了。
如果每个数都有1,2,3,4,可以把1,2,3,4的全排列,计算一下,发现余数0~6都有,所以剩下的数随便找个排列就好,然后用1,2,3,4去吧余数抵消即可。注意某种情况是1234000。
代码:
#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <string>#include <map>#include <cmath>#include <queue>#include <set>using namespace std;int n, num[10];string ans;int last;int dfs (int pos, int pre, string s) { if (pos == 0) { ans = s; last = pre; return 1; } for (int i = 0; i <= 9; i++) { if (pos == n - 4 && i == 0) continue; if (num[i]) { num[i]--; return dfs (pos - 1, (pre * 10 + i) % 7, s + (char) (i + '0') ); } } return 1;}char str[22];vector<string>vec[7];void init() { string s = "1234"; do { int x = 0; for (int i = 0; i < 4; i++) x = (x * 10 + (s[i] - '0') ) % 7; vec[x].push_back (s); } while (next_permutation (s.begin(), s.end() ) );// for (int i = 0; i < 7; i++) {// for (int j = 0; j < vec[i].size(); j++) cout << vec[i][j] << ' ';// printf ("\n");// }}int main() { int T; //freopen ("f.txt", "r", stdin); init(); scanf ("%d", &T); while (T--) { scanf ("%s", str); n = strlen (str); memset (num, 0, sizeof (num) ); for (int i = 0; i < n; i++) num[str[i] - '0']++; num[1]--; num[2]--; num[3]--; num[4]--; ans = ""; if(num[0]==n-4){ for(int i=0;i<num[0];i++)ans+='0'; cout<<vec[0][0]+ans<<endl; continue; } dfs (n - 4, 0, ans); last = last * 10000 % 7; cout << ans + vec[ (7 - last) % 7][0] << endl; } return 0;}/*input 21234531234output4123354123*/
0 0
- URAL 1095 Nikifor 3 (注意读题)
- Nikifor 3(ural 1095)
- Ural 1095 Nikifor 3 数论
- timus 1095 Nikifor 3【思路】
- URAL 1130 Nikifor's Walk
- URAL - 1820 Ural Steaks(小学生题)
- URAL 2067(思路题)
- ural 1519(插头DP入门题)
- ural 1820. Ural Steaks -思维题
- URAL 1820 Ural Steaks (贪心)
- Ural 1544 Classmates 3
- Labyrinth (URAL 1033)
- URAL 1104(数论)
- URAL 1113(数学)
- URAL
- 【ural】
- URAL
- URAL
- dedecms缩略图按大小比例缩小裁剪
- Activiti explorer in report employ
- 用 GStreamer 简化 Linux 多媒体开发
- 架构漫谈(三):如何做好架构之识别问题
- Android多媒体学习六:利用Service实现背景音乐的播放
- URAL 1095 Nikifor 3 (注意读题)
- 手机号码实名认证
- Python实现八大排序算法(转载)+ 桶排序(原创)
- Java多线程 -- JUC包源码分析8 -- 对happen before的深刻理解
- 如何在Visual Sutdio中编写JAVA工程?
- SQL等分组计算 mysql类型转换 2016.09.02回顾
- 如何把vs2003转化成vs2005
- iOS中定时器有三种
- Linux Top 命令解析