题目链接https://vjudge.net/contest/244167#problem/D

题目:

For a dance to be proper in the Altered Culture of Machinema, it must abide by the following rules:
1 A dip can only appear 1 or 2 steps after a jiggle, or before a twirl, as in: • ...jiggle dip... • ...jiggle stomp dip... • ...dip twirl...
2 All dances end with a clap stomp clap.
3 If a dance contains a twirl, it must have a hop.
4 No dance can start with a jiggle.
5 All dances must have a dip.
As instructor at a dance composition school, you must grade many freshman attempts at composing dances. You decide to make an automatic grader that can check against these rules.
Input
The input consists of a number of dances, one per line. Each dance has a maximum of 1000 steps. Each step is separated by a single space, and all steps are lowercase alphabetic words at most 100 letters long.
Output
If a dance in the input has no mistakes, then the output should contain the words ‘form ok:’ followed by the original composition.
If a dance has a single type of form error, then the output should contain the words ‘form error K:’ where K is the rule which failed, followed by the composition.
If a dance has multiple types of form errors, then the output should contain the errors as a comma separated clause, as in “form errors K(1) K(2) ... K(N −1) and K(N):’ where the form errors are in increasing order, followed by the composition.
If a dance has form error 1, every dip in the dance that violates rule 1 should be printed in upper case.
 
Sample Input
dip twirl hop jiggle hop hop clap stomp clap
dip hop jiggle hop hop clap stomp clap
dip twirl hop jiggle hop hop clap clap stomp
jiggle dip twirl hop jiggle hop hop clap stomp clap
jiggle dip
jiggle
dip twirl hop dip jiggle hop dip hop clap stomp clap
 
Sample Output
form ok: dip twirl hop jiggle hop hop clap stomp clap
form error 1: DIP hop jiggle hop hop clap stomp clap
form error 2: dip twirl hop jiggle hop hop clap clap stomp
form error 4: jiggle dip twirl hop jiggle hop hop clap stomp clap
form errors 2 and 4: jiggle dip
form errors 2, 4 and 5: jiggle
form error 1: dip twirl hop DIP jiggle hop dip hop clap stomp clap
 
题目大意:给你一行跳舞的字符串,由不超过1000个单词组成(仅包含单词和空格),每个单词不超过100个字母,需要满足一下5个要求:
1.“dip”一定要在“jiggle”后面一个单词或两个单词,或者在twirl前面一个单词,其他都是错的。
2.每个字符串的一定要以“clap stomp clap”结尾,否则就是错的。
3.如果该行字符串包含“twirl”,就一定要有“hop”,否则就是错的。
4.该行字符串不能以“jiggle”开头。
5.该行字符串一定要有“dip”。
判断该行字符串是否有错,如果没错就直接输出 ‘form ok:’加上输入的那行字符串,如果有错,就输出那么错误的编号,再加上输入的那行字符串,注意,如果是错误1的话,需要将错误的dip改成大写的DIP,具体输出格式看样例。
 
解题思路:这题目有点水,当时比赛时看起来好像挺麻烦的就没去做,其实那几个条件判断都不是很复杂。也不用想啥思路的,直接就是输入后一个一个条件判断就是了。输入一行可以用getline()输入,然后将每个单词分开就行。条件判断有点复杂的就是条件1吧,开始都判断错了,可以直接判断符合该条件的所有情况,反过来就是不符合该条件的情况。然后这个题目最变态的就是这输出格式了,弄的那么复杂,还是要挺小心的。代码有点长,码力还比较弱,码了挺久的,开始样例都没过,改错改来改去的,还好一次提交就过了。。
 
附上代码:
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
string str;
int flag[]; int main()
{
while(getline(cin,str))
{
vector<string> vec;
memset(flag,,sizeof(flag));
for(int i=;i<;i++)
vec.clear();
int len=str.length();
string ss;
for(int i=;i<len;i++)
{
if(str[i]!=' ')
{
ss+=str[i];
}
if(str[i]==' '||i==len-)
{
vec.push_back(ss);
ss="";
}
}
//判断条件2
if(str.size()<)
flag[]=;
else
{
string sss=str.substr(str.size()-,);
//cout<<sss<<endl;
if(sss!="clap stomp clap")
flag[]=;
}
//cout<<flag[2]<<endl;
str.clear();
int l=vec.size(),cntdip=,cnthop=,cnttwirl=;
for(int i=;i<l;i++)
{
//cout<<vec[i]<<endl;
if(vec[]=="jiggle") //判断条件4
{
flag[]=;
}
if(vec[i]=="twirl")
cnttwirl++;
if(vec[i]=="hop")
cnthop++;
if(vec[i]=="dip") //判断条件1
{
cntdip++;
int flag1=,flag2=,flag3=;
if(i>=&&vec[i-]=="jiggle")
flag1=;
if(i>=&&vec[i-]=="jiggle")
flag2=;
if(i<=l-&&vec[i+]=="twirl")
flag3=;
if(flag1==&&flag2==&&flag3==) //全都不符合说明是错的
{
flag[]=;
vec[i]="DIP";
}
}
}
if(cnttwirl!=&&cnthop==) //判断条件3
flag[]=;
if(cntdip==) //判断条件5
flag[]=;
int cnt=,k;
for(int i=;i<=;i++)
{
if(flag[i])
{
cnt++;
k=i;
}
}
if(cnt==)
cout<<"form ok: ";
else if(cnt==)
printf("form error %d: ",k);
else
{
int k=;
printf("form errors ");
for(int i=;i<=;i++)
{
if(flag[i])
{
k++;
if(k==cnt-)
printf("%d and ",i);
else if(k==cnt)
printf("%d: ",i);
else
{
printf("%d, ",i);
}
}
}
}
for(int i=;i<l;i++)
{
if(i==)
cout<<vec[i];
else
cout<<" "<<vec[i];
}
cout<<endl;
}
return ;
}
 

UVALive - 4222的更多相关文章

  1. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

  2. UVALive 4222 /HDU 2961 Dance 大模拟

    Dance Problem Description For a dance to be proper in the Altered Culture of Machinema, it must abid ...

  3. UVALive - 4108 SKYLINE[线段树]

    UVALive - 4108 SKYLINE Time Limit: 3000MS     64bit IO Format: %lld & %llu Submit Status uDebug ...

  4. UVALive - 3942 Remember the Word[树状数组]

    UVALive - 3942 Remember the Word A potentiometer, or potmeter for short, is an electronic device wit ...

  5. UVALive - 3942 Remember the Word[Trie DP]

    UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...

  6. 思维 UVALive 3708 Graveyard

    题目传送门 /* 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000 ...

  7. UVALive 6145 Version Controlled IDE(可持久化treap、rope)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  8. UVALive 6508 Permutation Graphs

    Permutation Graphs Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  9. UVALive 6500 Boxes

    Boxes Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Pract ...

随机推荐

  1. C# DataTable详解

    添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...

  2. Git的配置与使用

    Git的配置与使用 一,未配置过git 1.1,安装Git https://git-for-windows.github.io/ 1,2,鼠标右键点击Git Bash Here 1.3,输入命令 cd ...

  3. [转帖]前端-chromeF12 谷歌开发者工具详解 Console篇

    前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud ...

  4. Day3-1 函数

    定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 语法: def calc(x, y): ...

  5. ArcGIS DeskTop 10.2 的安装与破解

    ArcGIS DeskTop 10.2套件作为一组常用的ArcGIS软件为我们提供了对地图原始数据进行加工以及各种操作,通过这组软件我们能够很好地定制我们最终的地图样式,但是更多的时候我们需要对这组软 ...

  6. File类 详解!

    package cn.zhoucufeng; import java.io.File; import java.io.IOException; import java.util.Arrays; imp ...

  7. Lodop打印维护PRINT_SETUP本地缓存ini文件

    针对千差万别的客户端,Lodop提供了打印维护(PRINT_SETUP),可以针对某个客户端微调,调整结果保存在客户端本地,不会影响其他访问网站的用户的使用. 打印维护使用方法:1.PRINT_INI ...

  8. python生成器中yield和send分析

    生成器 在python中生成器是指用代码实现迭代器的的功能本质还是迭代器,只不过是代码实现迭代器功能.在python中生成器是由函数实现的,通常我们在函数中加入yeild就可以实现生成器. 生成器中y ...

  9. 错误代码 0x800700b7 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节

    如果是运行VS时就报错,改个端口号就可以解决问题,改完以下两个地方重新运行

  10. 深度学习框架比较TensorFlow、Theano、Caffe、SciKit-learn、Keras

    TheanoTheano在深度学习框架中是祖师级的存在.Theano基于Python语言开发的,是一个擅长处理多维数组的库,这一点和numpy很像.当与其他深度学习库结合起来,它十分适合数据探索.它为 ...