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

题意:

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

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. 20分钟打造你的Bootstrap站点

    来源:http://www.w3cplus.com/css/twitter-bootstrap-tutorial.html 特别声明:此篇文章由白牙根据Leon Revill的英文文章原名<Tw ...

  2. python 获取中文文件名的输出

    #coding:utf8 if __name__ == '__main__': srcfile = u"D:/测试路径/测试文件.txt" f = open(srcfile.enc ...

  3. PostgREST docker-compose 试用

    PostgREST 是一款很不错的直接将pg 数据库暴露为restapi ,使用了基于行级别安全访问控制, 比较全的restapi 查询以及集成了swagger openapi docker-comp ...

  4. sqlserver 2008 r2 下载地址和序列号,可用迅雷下载

    sqlserver 2008 r2 下载地址,可用迅雷下载 下载sqlserver 2008 r2 ,微软用了一个下载器,经过从下载器上,将他的地址全部用键盘敲了下来.最终的简体中文版地址如下: 32 ...

  5. kettle--变量的使用

    一.kettle的inner join 需求: 目前本地文件系统上有一个person.csv文件: 数据库中有一个person表: 现在需要将这两张表做inner join的操作. 1.1首先我们写一 ...

  6. FastAdmin 开发第一天:了解 FastAdmin 框架

    了解 FastAdmin 框架 后端组件 ThinkPHP 5 EasyWeChat qr-code 前端组件 AdminLTE bootstrap bootstrap-table jquery la ...

  7. ActiveMQ消息持久化存储策略

    ActiveMQ的内核是Java编写的,也就是说如果服务端没有Java运行环境ActiveMQ是无法运行的.ActiveMQ启动时,启动脚本使用wrapper包装器来启动JVM.JVM相关的配置信息在 ...

  8. JUC原子类之 原子操作数据类型

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ; 数组类型: AtomicInteger ...

  9. windows server 2008 R2 无法启用"网络发现" 需要启动的服务

    必须打开以下服务: 1.dnscache(简写.fdrespub(简写) 2.SSDP Discovery 3. UPnP Device Host 4. Computer Browser 5.Serv ...

  10. OSI7层封包解包动态图-数据在网络中的传输过程.gif