UVa 185 - Roman Numerals
来源:互联网 发布:python开源网站源码 编辑:程序博客网 时间:2024/06/06 01:24
題目:給你一個羅馬數組組成的計算式A+B=C,判斷等式是否成立,有兩種方案:
1.羅馬數字:每個字母代表一個數字,相鄰數字左邊的小就右邊減去左邊的數字,否則加和;
2.阿拉伯數字:每個字母用不同的數字代替(無前導零)。
分析:圖論,搜索。數據較小,利用回溯法搜索即可,可以按數字搜索,也可以按字母搜索。
說明:用char存儲數據溢出,好久才發現,╮(╯▽╰)╭。
#include <cstring>#include <cstdio>char str[33], buf[3][11], maps[9];int roman[128], first[128], visit[128], used[10], digit[128];int ans;int value[3];void dfs(int d, int n){if (ans > 1) return;if (d >= n) {for (int i = 0; i < 3; ++ i) {value[i] = 0;for (int j = 0; buf[i][j]; ++ j)value[i] = value[i]*10 + digit[buf[i][j]];}ans += (value[0]+value[1] == value[2]);return;}else {for (int i = 0; i <= 9; ++ i) {if (used[i] || !i && first[maps[d]]) continue;digit[maps[d]] = i;used[i] = 1;dfs(d+1, n);used[i] = 0;if (ans > 1) return;}}}int main(){roman['I'] = 1; roman['V'] = 5;roman['X'] = 10;roman['L'] = 50;roman['C'] = 100;roman['D'] = 500;roman['M'] = 1000;int rvalue[3];while (gets(str) && str[0] != '#') {int size = 0, count = 0, sum = 0;memset(visit, 0, sizeof(visit));for (int i = 0; str[i]; ++ i) {if (str[i] == '+' || str[i] == '=') {buf[size ++][count] = 0;count = 0;}else {buf[size][count ++] = str[i];if (!visit[str[i]]) {visit[str[i]] = 1;maps[sum ++] = str[i];}}}buf[size ++][count] = 0;memset(first, 0, sizeof(first));for (int i = 0; i < 3; ++ i) {rvalue[i] = 0;for (int j = 0; buf[i][j]; ++ j) {if (buf[i][j+1] && roman[buf[i][j]] < roman[buf[i][j+1]])rvalue[i] -= roman[buf[i][j]];else rvalue[i] += roman[buf[i][j]];}first[buf[i][0]] = 1;}if (rvalue[0]+rvalue[1] == rvalue[2])printf("Correct ");else printf("Incorrect ");ans = 0;memset(used, 0, sizeof(used));dfs(0, sum);if (ans > 1)printf("ambiguous\n");else if (ans == 1)printf("valid\n");else printf("impossible\n");} return 0;}
0 0
- uva 185 Roman Numerals
- UVA 185 - Roman Numerals
- UVa 185 - Roman Numerals
- uva :185 - Roman Numerals(dfs)
- UVA - 185 Roman Numerals(回溯+剪枝)
- UVa 11616 - Roman Numerals
- uva 185 Roman Numerals (深搜+字符串处理)
- Roman Numerals ---解题报告
- UVa185 - Roman Numerals
- Roman numerals BIT1002
- 1002 Roman numerals
- Roman numerals 解题报告
- bit Roman numerals
- POJ-1213-Roman Numerals
- ROMAN NUMERALS 题解
- Checkio: Roman numerals
- uva185 - Roman Numerals
- 寒假练习 1002 Roman numerals
- POJ 3468 线段树 区间修改 基础题
- Python开发测试工具(二)—Monkey工具的优化
- 如何关心女朋友?
- dup2 redirect stdout stderr
- Tsinsen A1129 税收与补贴问题
- UVa 185 - Roman Numerals
- xml入门及bom
- hdu2588(欧拉函数的应用)
- LeetCode(28)-Remove Duplicates from Sorted Array
- hdu5558 后缀数组
- JQuery制作简单的网页导航特效
- 字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16
- 实例详解机器学习如何解决问题
- Android学习之Soft Keyboard使用文档翻译