uva-185-暴力枚举
请相信,这是一道水题,读了一周的题意
题意:
题目里面描述的那三个条件可以直接无视,关于罗马数字只要知道一个规则即可,映射如下
I 1 V 5
X 10 L 50
C 100 D 500
M 1000
如果一个字母映射的数字比后一个字母映射的数字小,当前的数字就作为负数.
MXMIII = 1000-10+1000+1+1+1=1993
输入的全是合法的罗马数字,问的问题有俩个,
在罗马数字编码中,s1+s2是否等于s3,如果相等输出Correct,要不然输出Incorrect
在阿拉伯数字编码中s1+s2是否等于s3,
罗马数字到阿拉伯数字编码规则,对于一个罗马数字中字母映射到0-9,当然,阿拉伯数字不能是前导0开头
AC:30ms
#include<stdio.h>
#include<iostream>
#include<queue>
#include<map>
#include<memory.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
using namespace std; string valid = "valid";
string impossible = "impossible";
string ambiguous = "ambiguous";
string correct = "Correct";
string incorrect = "Incorrect";
int t[];
int total = ;
int vis[];
int val[];
char str[];
int length;
int endLength = ;
char eqAfterChar;
int sum1 = , sum2 = ;
void table()
{
t['I' - 'A'] = ;
t['X' - 'A'] = ;
t['C' - 'A'] = ;
t['M' - 'A'] = ;
t['V' - 'A'] = ;
t['L' - 'A'] = ;
t['D' - 'A'] = ;
} void dfs(int cur, int sum)
{
if(total == )
return;
if(cur == length)
{
if(sum1+sum2 == sum)
total++;
return;
}
char c = str[cur];
if(c == '=')
{
sum2 = sum;
sum=;
++cur;
c = str[cur];
}
else if(c == '+')
{
++cur;
c = str[cur];
sum1 = sum;
sum = ;
} if(vis[c - 'A'] == -)
{
int i = ;
if(c == eqAfterChar && endLength != )
i = ;
for(; i < ; i++)
{
if(val[i])
continue;
val[i] = ;
sum = sum * + i;
vis[c - 'A'] = i;
dfs(cur + , sum);
sum = (sum-i) / ;
vis[c - 'A'] = -;
val[i] = ;
}
}
else
{
sum = sum * + vis[c - 'A'];
dfs(cur + , sum);
sum = sum / - vis[c - 'A'];
}
} int main(const int argc, char** argv)
{
freopen("d:\\1.txt", "r", stdin);
table();
while (scanf("%s", str))
{
if(str[] == '#')
return ;
total = ;
sum1 = , sum2 = ;
memset(vis, -, sizeof(vis));
memset(val, , sizeof(val));
length = strlen(str);
int t1 = ;
int k = ; for(int i = length - ; i >= ;)
{
if(str[i] == '=' || str[i] == '+')
{
if(str[i] == '=')
eqAfterChar = str[i + ];
k = -;
--i;
continue;
}
if(i != && str[i - ] != '=' && str[i - ] != '+')
{
if(t[str[i] - 'A'] > t[str[i - ] - 'A'])
t1 = t1 + (t[str[i] - 'A'] - t[str[i - ] - 'A']) * k;
else
t1 = t1 + (t[str[i] - 'A'] + t[str[i - ] - 'A']) * k; --i;
}
else
t1 += t[str[i] - 'A'] * k;
if(k == )
endLength++;
--i;
}
if(t1 == )
cout << correct;
else
cout << incorrect;
dfs(, );
if(total == )
cout << " " << impossible << endl;
else if(total == )
cout << " " << valid << endl;
else
cout << " " << ambiguous << endl;
}
return ;
}
uva-185-暴力枚举的更多相关文章
- uva 11088 暴力枚举子集/状压dp
https://vjudge.net/problem/UVA-11088 对于每一种子集的情况暴力枚举最后一个三人小组取最大的一种情况即可,我提前把三个人的子集情况给筛出来了. 即 f[S]=MAX{ ...
- UVA 185(暴力DFS)
Roman Numerals The original system of writing numbers used by the early Romans was simple but cum ...
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...
- UVA 10012 How Big Is It?(暴力枚举)
How Big Is It? Ian's going to California, and he has to pack his things, including his collection ...
- UVA - 11464 Even Parity 【暴力枚举】
题意 给出一个 01 二维方阵 可以将里面的 0 改成1 但是 不能够 将 1 改成 0 然后这个方阵 会对应另外一个 方阵 另外一个方阵当中的元素 为 上 下 左 右 四个元素(如果存在)的和 要求 ...
- 紫书 例题 10-2 UVa 12169 (暴力枚举)
就是暴力枚举a, b然后和题目给的数据比较就ok了. 刘汝佳这道题的讲解有点迷,书上讲有x1和a可以算出x2, 但是很明显x2 = (a * x1 +b) 没有b怎么算x2?然后我就思考了很久,最后去 ...
- UVA 725 UVA 10976 简单枚举
UVA 725 题意:0~9十个数组成两个5位数(或0开头的四位数),要求两数之商等于输入的数据n.abcde/fghij=n. 思路:暴力枚举,枚举fghij的情况算出abcde判断是否符合题目条件 ...
- CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)
题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...
- 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)
/* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> #include<cstri ...
- HNU 12886 Cracking the Safe(暴力枚举)
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274 解题报告:输入4个数 ...
随机推荐
- Largest Submatrix of All 1’s
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we m ...
- hdu2069-2071
hdu2069 选取硬币组成定值,暴力 #include<stdio.h> ]={,,,,,}; int main(){ int n; while(scanf("%d" ...
- gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗 ...
- MyBatis-动态SQL的if、choose、when、otherwise、trim、where、set、foreach使用(各种标签详解), 以及实体间关系配置
比较全的文档:https://www.cnblogs.com/zhizhao/p/7808880.html 或 https://blog.csdn.net/zhll3377/article/detai ...
- test20181005 序列
题意 考场30分 维护差值,考虑每次移动的变更,当前2-n位置上的差加1,1位置上的差减n-1. 然后要求的是绝对值的和,用吉司机线段树维护最大最小值.次大次小值. 期望复杂度\(O(n \log n ...
- BL老师的建议,数学不好的,大数据一票否决--后赋从java转大数据
__________________________ 作者:我是蛋蛋链接:https://www.zhihu.com/question/59593387/answer/167235075来源:知乎著作 ...
- dockercompose up build fail
docker https://auth.docker.io/token dial tcp lookup auth.docker.io i/o timeo Error response from dae ...
- All the Apache Streaming Projects: An Exploratory Guide
The speed at which data is generated, consumed, processed, and analyzed is increasing at an unbeliev ...
- mave安装配置
首先从官网上 http://maven.apache.org/ 下载最新版Maven.我用的是apache-maven-3.0.4-bin.tar.gz.将下载后的文件拷贝到 /usr/local/目 ...
- PHP安全相关的配置(1)
PHP作为一门强大的脚本语言被越来越多的web应用程序采用,不规范的php安全配置可能会带来敏感信息泄漏.SQL注射.远程包含等问题,规范的安全配置可保障最基本的安全环境.下面我们分析几个会引发安全问 ...