Link:http://codeforces.com/problemset/problem/7/E

Brief Introduction:一个表达式由多个“Macros”组成,每个Macro都为一个整体,如果最终的表达式使得运算顺序发生改变则称该表达式不安全

给你多个Macros和最终的表达式,询问该表达式是否安全

Algorithm:

要判断最终的表达式是否安全,就是要看其中的每个Macro是否安全,同时每一个运算符是否会使其整个变得不安全

我们发现要判断每个Macro的安全性也要经过同样的过程

从而将原问题化归为了解决多个相同的子问题并最终加合的问题。这样就可以想到利用递归或dp来解决问题

我们可以将每一部分划为4个状态,方便之后状态的加合

0:本身已经不安全

1:该macro在“/”或"-"后不安全

2:该macro仅在"/"后不安全

3:无论何时此皆安全

这样就构建了状态“安全程度”的单调性。判断两表达式加合起来的状态时,仅要判断其是否大于某个安全程度即可

Code:

#include <bits/stdc++.h>

using namespace std;

int n,len=,w=;
string t;
char s[];
map<string,int> mp; int eval(int l,int r)
{
for(int i=r,w=;i>l;i--)
if(w+=(s[i]==')'),w-=(s[i]=='('),!w&&(s[i]=='-' || s[i]=='+'))
{
int L=eval(l,i-),R=eval(i+,r);
return L&&R&&(s[i]!='-' || R>); //对"-"后的判断为安全程度是否大于1
}
for(int i=r,w=;i>l;i--)
if(w+=(s[i]==')'),w-=(s[i]=='('),!w&&(s[i]=='*' || s[i]=='/'))
{
int L=eval(l,i-),R=eval(i+,r);
return (L>)&&(R>)&&(s[i]!='/' || R>)?:;
}
if(s[l]=='(') //有了括号,就没有1、2状态了
return eval(l+,r-)?:;
string a(s+l,s+r+);
return mp.count(a)?mp[a]:;
} int Get()
{
gets(s);
for(int i=len=;s[i];i++)
if(s[i]!=' ') s[len++]=s[i];
return eval(,len-);
} int main()
{
cin >> n;
for(int i=;i<=n;i++)
{
scanf(" #%*s");cin >> t;
mp[t]=Get();
}
cout << (Get()?"OK":"Suspicious");
return ;
}

Review:

1、字符串读入技巧:

scanf中*s,*d均为省略符号,只读取而不存储

使用gets函数可读取这一行剩下的所有内容

2、对此类包含括号匹配问题的通用技巧:

在循环时用一个变量记录此时括号是否已经匹配,是则进行递归

3、当发现可以将问题变为更小规模分别处理时,使用递归手法,正确将状态分类

4、如果状态种类较多,可以构建状态从“好”到“坏”的单调性从而方便判断

[Codeforces 7E] Defining Macros的更多相关文章

  1. Codeforces 7E - Defining Macros 题解

    目录 Codeforces 7E - Defining Macros 题解 前言 做法 程序 结尾 Codeforces 7E - Defining Macros 题解 前言 开始使用博客园了,很想写 ...

  2. Codeforces

    Codeforces 7E #include <iostream> #include <cstring> #include <cstdio> #include &l ...

  3. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  4. Google C++ 代码规范

    Google C++ Style Guide   Table of Contents Header Files Self-contained Headers The #define Guard For ...

  5. 个人作业-Week 2 代码复审

    一.概要部分 1.代码能符合需求和规格说明么? 经过我自己的测试和助教的检测,他的代码符合需求和规格的说明. 2.代码设计是否有周全的考虑? 这里代码设计我们是从两个方面检查的: 对方处理控制台输入的 ...

  6. sys_arch interface for lwIP 2.0.3

    sys_arch interface for lwIP 2.0.3 Author: Adam Dunkels Simon Goldschmidt The operating system emulat ...

  7. Zend API:深入 PHP 内核

    Introduction Those who know don't talk. Those who talk don't know. Sometimes, PHP "as is" ...

  8. Codeforces Round #284 (Div. 2)A B C 模拟 数学

    A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Codeforces 593B Anton and Lines

    LINK time limit per test 1 second memory limit per test 256 megabytes input standard input output st ...

随机推荐

  1. HTTP请求中同步与异步有什么不同

    普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: ...

  2. Hbase写入量大导致region过大无法split问题

    最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题.让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region ...

  3. Ubuntu1604 install netease-cloud music

    Two issue: 1. There is no voice on my computer, and the system was mute and cannot unmute. eric@E641 ...

  4. VR行业纷纷倒闭:有硬件没内容

    从去年年底开始,VR就成为了一个流行词汇,不仅是巨头公司砸钱布局,众多创业公司也纷纷投入其中.但是,一窝蜂拥入的企业基本都没有成熟的商业模式和赢利模式,只能靠融资供血.在资本寒冬中,大部分的VR企业开 ...

  5. [BZOJ1984]月下“毛景树”解题报告|树链剖分

    Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里.爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的“毛景树” ...

  6. 【BZOJ】1782: [Usaco2010 Feb]slowdown 慢慢游

    [算法]DFS序+树状数组 [题解]题意相当于统计前i-1个点在第i个点的祖先的个数,显然可以用dfs维护,用树状数组差分维护前缀和. 出栈不新加节点就要注意左闭右开,即in[a[i]]处+1,ou[ ...

  7. Django【进阶】缓存

    Django缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者me ...

  8. mysql 四 表操作

    表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 本节重点: 1 创建 ...

  9. IC卡的传输协议(1)-字符传输协议T=0【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172022.HTM 在异步半双工传输协议中,主要定义了终端为实现传输控制和特殊需要发出的命令及这些命令的处理过程. 在 ...

  10. time_t转化成日期格式小工具

    time_t转化成日期格式小工具下载  http://files.cnblogs.com/files/lansan0701/TimeTool.zip