POJ 1126:Simply Syntax
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 5264 | Accepted: 2337 |
Description
asked them to write a program that could check the syntactical correctness of any sentence they wrote. Similar to the nature of Hedonians, the syntax of Hedonian is also pleasantly simple. Here are the rules:
0.The only characters in the language are the characters p through z and N, C, D, E, and I.
1.Every character from p through z is a correct sentence.
2.If s is a correct sentence, then so is Ns.
3.If s and t are correct sentences, then so are Cst, Dst, Est and Ist.
4.Rules 0. to 3. are the only rules to determine the syntactical correctness of a sentence.
You are asked to write a program that checks if sentences satisfy the syntax rules given in Rule 0. - Rule 4.
Input
that each sentence has at most 256 characters and at least 1 character.
Output
an end-of-file character.
Sample Input
Cp
Isz
NIsz
Cqpq
Sample Output
NO
YES
YES
NO
题意是判断所给出的字符串是否符合题目中所给出的五项标准。
第0项:句子中的字母只能是p到z,和N、C、D、E、I。
第1项:每一个p到z的字母就单独是一个正确的句子。(这个其实很关键,标志了到底有几个句子,就是有多少个这样的小写字母就有多少个正确句子,一开始我就是没怎么仔细看第一个条件导致对第四个样例输出结果有疑惑。)
第2项:如果s是一个正确句子,那么Ns也是一个正确句子。
第3项:如果s和t是正确句子,那么Cst,Dst,Est,Ist也是正确句子。
第4项:只有规则0到3是判断句子是否正确的规则,其余的不算数。
输出只能是一个正确句子,两个以上的不行。
比方说sz。
因为s是一个正确句子,z也是一个正确句子,这样的话sz就有两个了,除非前面有N、C、D、E、I,变成一个,否则不行。
首先说一下:The input consists of a number of sentences consisting only of characters p through z and N, C, D, E, and I. 尽管是有这句话,但还是要考虑有其他字符出现的情况,可能这里会跪掉。
一开始想拿到一个字符串的话,扫描其字符有两种方式,从左至右或者是从右至左。然后自己想从左至右的话是怎么弄怎么麻烦,因为碰到C、D、E、I还要记录吃掉后面的两个句子,这样碰到要标记再碰到再标记。就觉得很麻烦,不如从右至左,遇到一个q到z,句子flag就加一。遇到N,flag不变。遇到N、C、D、E、I就flag减一。遇到其他字符的flag直接赋为0。最后看flag是否等于1,不等于的就No。
代码:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; int flag; void cal(string s)
{
if(s.length() == 0)
{
return;
}
else
{
int len=s.length();
if(s[len-1]>='p' && s[len-1]<='z')
{
flag++;
cal(s.substr(0,len-1));
}
else if(s[len-1]=='N')
{
cal(s.substr(0,len-1));
}
else if(s[len-1]=='C'||s[len-1]=='D'||s[len-1]=='E'||s[len-1]=='I')
{
flag--;
cal(s.substr(0,len-1));
}
else
{
flag=0;
return;
}
}
} int main()
{
string s;
while(cin>>s)
{
flag=0; cal(s); if(flag==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 1126:Simply Syntax的更多相关文章
- Simply Syntax(思维)
Simply Syntax Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5551 Accepted: 2481 Des ...
- POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...
- POJ 3252:Round Numbers
POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...
- 【九度OJ】题目1126:打印极值点下标 解题报告
[九度OJ]题目1126:打印极值点下标 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1126 题目描述: 在 ...
- POJ 1459:Power Network(最大流)
http://poj.org/problem?id=1459 题意:有np个发电站,nc个消费者,m条边,边有容量限制,发电站有产能上限,消费者有需求上限问最大流量. 思路:S和发电站相连,边权是产能 ...
- POJ 3436:ACM Computer Factory(最大流记录路径)
http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...
- POJ 2195:Going Home(最小费用最大流)
http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...
- POJ 3281:Dining(最大流)
http://poj.org/problem?id=3281 题意:有n头牛,f种食物,d种饮料,每头牛有fnum种喜欢的食物,dnum种喜欢的饮料,每种食物如果给一头牛吃了,那么另一个牛就不能吃这种 ...
- POJ 3580:SuperMemo(Splay)
http://poj.org/problem?id=3580 题意:有6种操作,其中有两种之前没做过,就是Revolve操作和Min操作.Revolve一开始想着一个一个删一个一个插,觉得太暴力了,后 ...
随机推荐
- java程序员的就业指导(重点)
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内 ...
- myeclipse汉化
MyEclipse默认安装在计算机用户目录下面,安装完成后对MyEclipse快捷方式使用鼠标右键属性---打开文件位置--进入安装的目录下面即可看到 zh_CN.7z解压缩将zh_CN目录文件放到 ...
- 「牛客CSP-S2019赛前集训营2」服务器需求
传送门 NowCoder 解题思路 考虑一种贪心选择方法:每次选出最大的 \(m\) 个 \(a_i\) 进行覆盖. 那么就会出现一种特殊情况,最高的那个 \(a_i\) 需要多次选择,而且不得不每次 ...
- 修改Xshell字体大小和颜色
博客专区 > XManager的博客 > 博客详情 修改Xshell字体大小和颜色 XManager 发表于7个月前 分享到: 一键分享 QQ空间 微信 腾讯微博 新浪微博 QQ好友 有道 ...
- 嵊州普及Day5T2
题意:将(w,h)的纸条折成(W,H),最少需几步. 思路:横竖互不干扰,然后最多可折int型一半,拿个函数判断两次比较即可,然后折不了的条件是需要的矩形大于给的矩形. 见代码: #include&l ...
- java实现在线预览 - -之poi实现word、excel、ppt转html
简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,例如永中office.office web 365(http://w ...
- [Struts]Token 使用及原理
Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法.然后转向带有表单的JSP页面. 2,在JSP页面提交 ...
- Ubuntu 16.04非编译安装Zabbix 3.2----服务端和客户端win的配置
控服务器 - 什么是Zabbix Zabbix是企业级开源分布式监控服务器解决方案. 该软件监控网络的不同参数和服务器的完整性,还允许为任何事件配置基于电子邮件的警报. Zabbix根据存储在数据库( ...
- uni app中关于图片的分包加载
因为在项目中使用了大量的静态资源图片,使得主包体积过大, 而把这些图片全部放到服务器又有点麻烦,就想能不能把图片也分包,但是直接放在分包下的话导致图片资源找不到了, 在社区中看到大佬分享的十分有用,特 ...
- ROS常用库(三)API学习之常用common_msgs(上)
一.概述 common_msgs包含其他ROS软件包广泛使用的消息.这些消息包括动作消息(actionlib_msgs),诊断消息(diagnostic_msgs),几何图元(geometry_msg ...