请相信,这是一道水题,读了一周的题意

题意:

题目里面描述的那三个条件可以直接无视,关于罗马数字只要知道一个规则即可,映射如下

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-暴力枚举的更多相关文章

  1. uva 11088 暴力枚举子集/状压dp

    https://vjudge.net/problem/UVA-11088 对于每一种子集的情况暴力枚举最后一个三人小组取最大的一种情况即可,我提前把三个人的子集情况给筛出来了. 即 f[S]=MAX{ ...

  2. UVA 185(暴力DFS)

      Roman Numerals  The original system of writing numbers used by the early Romans was simple but cum ...

  3. UVA.12716 GCD XOR (暴力枚举 数论GCD)

    UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...

  4. 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 ...

  5. UVA - 11464 Even Parity 【暴力枚举】

    题意 给出一个 01 二维方阵 可以将里面的 0 改成1 但是 不能够 将 1 改成 0 然后这个方阵 会对应另外一个 方阵 另外一个方阵当中的元素 为 上 下 左 右 四个元素(如果存在)的和 要求 ...

  6. 紫书 例题 10-2 UVa 12169 (暴力枚举)

    就是暴力枚举a, b然后和题目给的数据比较就ok了. 刘汝佳这道题的讲解有点迷,书上讲有x1和a可以算出x2, 但是很明显x2 = (a * x1 +b) 没有b怎么算x2?然后我就思考了很久,最后去 ...

  7. UVA 725 UVA 10976 简单枚举

    UVA 725 题意:0~9十个数组成两个5位数(或0开头的四位数),要求两数之商等于输入的数据n.abcde/fghij=n. 思路:暴力枚举,枚举fghij的情况算出abcde判断是否符合题目条件 ...

  8. CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)

    题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...

  9. 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)

    /* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> #include<cstri ...

  10. HNU 12886 Cracking the Safe(暴力枚举)

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274 解题报告:输入4个数 ...

随机推荐

  1. 利用git向github中推送文件

    /*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 如果对git不够熟悉的学者,可以参考:http://www.cnblogs.com/zengsf/p/75062 ...

  2. idea_快捷键default&eclipse

    关键字: SpringMybatisplusRedisApplicationTests github关键字(springboot拦截器完整项目): implements WebMvcConfigure ...

  3. LG2375 [NOI2014]动物园

    题意 给定一个长为\(L\)的字符串(\(L \leq 1e6\)) 求一个\(num\)数组,\(num[i]\)表示长度为\(i\)的前缀中字符串\(S'\)的数量,其中\(S'\)既是该前缀的前 ...

  4. Django FBV和CBV -

    一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...

  5. JSON与JAVA数据的转换-----从3,23到现在5.25才过去2个月,感觉时间过得那么漫长

    从3月23号去报到,期间经历了清明节,毕业论文答辩,从万达搬到东兴,五一节,毕业照,从东兴的一边搬到另外一个房间中去 2个月的时间过得如此的快啊!白驹过隙! 不要着急,不要和别人比,小龙哥写过3年代码 ...

  6. 一个方便查看数据库转换rest/graphql api 的开源软件的github 项目

    https://github.com/dbohdan/automatic-api 是一个不错的github 知识项目,帮助我们 列出了,常见的的数据库可以直接转换为rest/graphql api 的 ...

  7. vault 集群搭建(active standby 模式)

        参考架构图: consul server cluster 搭建 consul 基本配置格式 { "server": true, "node_name": ...

  8. android 图片解码显示流程

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/32327699 问题来源 android 能 ...

  9. implicit和 explicit关键字

    implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. class Digit { publi ...

  10. FileStream 和StreamWriter 一起用时

    StreamWriter  Flush 即可. FileStream Flush 无用.