单测试点时限: 6.0 秒

内存限制: 1024 MB

去年夏天的时候,唐纳德先生就注意到学校饮水机上挂了一个新的牌子:天热冷水需求量大。当时他还不以为意,这不过是一个普通的牌子。于是,天冷了。有一天他注意到牌子上面新增了一个交换的记号。原来,现在牌子要改成「天冷热水需求量大」了,但由于新的标语和旧的标语唯一的区别就是相邻的两个汉字交换了,所以维护人员为了省事儿,就直接在上面做了个记号。

唐纳德先生觉得这件事情很有趣,在自然语言中,交换相邻的两个字符或是单词,产生的句子在语法上仍然说得通这一现象其实并不少见。例如:

唐纳德最近发现交换相邻的单词不一定影响语法上的正确性。

交换「唐纳德」和「最近」,可以变成:

最近唐纳德发现交换相邻的单词不一定影响语法上的正确性。

这句话不仅在语法上合法,在语义上也是等价的。还有在语义上不等价的交换,在语法上也是合法的。例如交换「一定」和「不」:

最近唐纳德发现交换相邻的单词一定不影响语法上的正确性。

为了研究这一问题,唐纳德先生找了大量的语言材料,来分析交换相邻单词对语法合法性的影响。由于一般的自然语言处理常常需要用到大量高深的知识,唐纳德先生选取的语言材料来自一种名为 .DOC 的语言。这种语言的语法具有非常严苛的规则,可以用下面的上下文无关文法表示(其中 s 为开始符号,小写字母都是非终结符):

s ::= d 'O' c
d ::= 'D' | '.' s
c ::= 'C' | '.' s

现在给出一句合法的句子,要求对于所有可能的相邻字母的交换确认交换后的句子的合法性。

如果读到这里你已经知道怎么做这道题了,你可以跳过剩下的题目描述,直接跳到输入格式。但我还是想再啰嗦几句,以防你完全不知道上下文无关文法是什么。

简单的来说,.DOC 语言只有一种句子结构,就是经典的主谓宾结构。D 表示主语,O 表示谓语,C 表示宾语。例如 DOC 就是一句合法的句子。该语言允许使用主语从句和宾语从句。主语从句以 . 开头,后面是一句合法的句子;宾语从句也是以 . 开头,后面是一句合法的句子。例如 DO.DOC 的宾语是 .DOC;例如..DOCOCOC 也是合法的。对于一句句子,如果你可以用上面所提到的语法规则来解释,那么它就是合法的。

输入

输入第一行是一个整数 t (1≤t≤105),表示数据组数。

随后有 t 行,每行一个由 .DOC 组成的字符串 s (3≤|s|≤106)。保证这是一句合法的句子。

输入保证所有数据的长度之和不超过 106。

输出

对于每组数据,输出一个长度为 |s|−1 的字符串。字符串的第 i (1≤i≤|s|−1) 个字符表示交换字符串的第 i个字符和第 i+1 个字符后,字符串是否依然合法。如果合法,该位置填 C (Correct);如果非法,该位置填 D(Doomed)。

样例

input

3
DOC
DO.DOC
..DOCOCOC

output

DD
DDDDD
CDDDDDDD

分析:根据题意,输入均为合法的,不难发现,只有“..”的情况进行交换后语句才有可能是合法的。其他情况交换一律都是不合法的,所以遍历字符串时只要遍历每一个字符为"."且下一个字符为"."那么这个交换就是有效的。(其实这个规律在样例就可发现)

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
const int M=1e6+5;
ll x,len,j,i;
char str[M],ans[M],b;
int main()
{cin>>x;while(x--){j=0;cin>>str;len=strlen(str);for(i=0;i<=len-3;i++){if(str[i]=='.'&&str[i+1]=='.')ans[j++]='C';elseans[j++]='D';}ans[j++]='D';for(i=0;i<j;i++)cout<<ans[i];cout<<endl;}
}

EOJ 3674.唐纳德先生与 .DOC相关推荐

  1. 唐纳德先生与 .DOC

    唐纳德先生与 .DOC 题目链接:https://acm.ecnu.edu.cn/contest/126/problem/D/ 单测试点时限: 6.0 秒 内存限制: 1024 MB 去年夏天的时候, ...

  2. EOJ 3452 唐纳德先生和假骰子

    题目描述: 在进行某些桌游,例如 UNO 或者麻将的时候,常常会需要随机决定从谁开始.骰子是一种好方案.普通的骰子有六个面,分别是一点.二点.三点.四点.五点.六点,六面向上的概率相同.由于骰子只能产 ...

  3. EOJ #3452 唐纳德先生和假骰子【暴力】

    题目链接 题目意思 给你一个数字p,代表人数,接着给出你两个骰子的六个面的数值,现在要你将骰子向上的点数和对人数取余,得到的余数分别为0到p-1,现在问你游戏是否公平. 解题思路 数值很小我们就用暴力 ...

  4. 【EOJ Monthly 2019.01 - E】唐纳德先生与假骰子(假概率问题)

    题干: 单测试点时限: 6.0 秒 内存限制: 1024 MB 嗨,唐纳德先生又来了. 他又带了一枚假骰子,这个骰子的各个面的点数依然是 1,2,3,4,5,6 ,但是六个面向上的概率却不一定都是 1 ...

  5. EOJ Monthly 2019.1 3675. 唐纳德先生与假骰子

    链接 (https://acm.ecnu.edu.cn/problem/3675/statistics/) 单测试点时限: 6.0 秒 内存限制: 1024 MB 嗨,唐纳德先生又来了. 他又带了一枚 ...

  6. EOJ 唐纳德与子串 (Easy)

    题目链接 Easy档暴力也能解,不过又写了下KMP练练 #include<iostream> #include<string> #include<cstdio> # ...

  7. 大学计算机excel函数课件,大学计算机一级excel函数归类.doc

    大学计算机一级excel函数归类.doc (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 12在01工作表中,合并A15:B15, ...

  8. 华东师范大学2018.11月赛【EOJ Monthly 2018.11】

    [EOJ Monthly 2018.11] A. 心与心的距离 Time limit per test: 2.0 seconds Memory limit: 512 MB 近在咫尺,远在天边.心与心的 ...

  9. 福建省2013高职单招计算机类试题,13年福建-高职单招-计算机类试题及答案.doc

    计算机类专业基础知识试题 第Ⅰ卷 单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确的字母标号填涂在答题卡相应在位置上,每小题3分,共120分) 世界上第一台计算机(ENIAC)诞生的时 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第4期)
  2. ICML 2019 | 图马尔可夫神经网络
  3. 回溯算法-----复原IP地址(Java版本)
  4. 嘿!我用python帮我干这些事
  5. shell中trap捕捉到信号的处理
  6. Redis操作hash类型
  7. 识别SDN中的安全隐患
  8. linux-macbook内核,技术|用 Linux 让旧 MacBook 重获新生
  9. html无损转换pdf,Pdf2html :高保真PDF至HTML转换
  10. java aop xml配置_spring AOP使用 xml配置
  11. java基础---对象锁和类锁的区别
  12. 2021时间序列-对比学习必读的四篇论文
  13. 【国土】国土“三调”,用这个方案就对了
  14. JDK/ADB环境变量配置
  15. 花两个月吃透京东T8推荐的178页京东基础架构建设之路,入职定T5
  16. What is it exactly that makes some people command
  17. html创建站点文件夹,构建及访问Web站点
  18. ImageMagick-libs安装报错
  19. Greenplum小把戏 - 几个常用数据库对象大小查询SQL
  20. 电脑中删掉的照片怎么恢复

热门文章

  1. windows 单机 - elasticsearch-7.11.1 、kibana-7.11.1 安装部署
  2. 流氓软件卸载 比如Qiaozip 巧压等进程导致占用无法删除
  3. SpringBoot项目实战:员工管理系统
  4. 抓虾 — Bloglines Plus
  5. 如果要设计个分布式文件系统,该从哪些方面考虑?
  6. linux下使用PulseAudio获取扬声器的音量和是否静音(C++)
  7. 基于JAVA的私人牙科诊所管理系统(论文+PPT+源码)
  8. 新冠肺炎数据:美国霍普金斯大学
  9. 关于Mac 下载vscode 过于缓慢的解决办法,亲测有效
  10. 揭开RedisShake的秘密