`

NENU 博士的化学元素发音问题

    博客分类:
  • dp
 
阅读更多

某天,博士突然对化学无比狂热,对化学的无比狂热使得他认为自己说的每一句话都应该由元素名称组成的,例如:“I Am CLaRa”I是碘,Am是镅,C是碳,La镧,Ra是镭),“InTeRnAtIONAl”。但是有些词他是不能说的,例如“collegiate”, “programming” and “contest”

现在给你一些单词,博士希望你确定这些单词是他是否能说,如果能输出YES,不能输出NO

 

Input

第一行T表示数据组数。

下面T行每行一个字符串,表示博士询问的词语。长度不超过5W

附录

"H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Rf","Db","Sg","Bh","Hs","Mt","Ds","Rg","Cn","Fl","Lv","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr"

Output

T行,每行为YES或者NO

Sample Input

4

international

collegiate

programming

Contest

Sample Output

YES

NO

NO

NO 

 

 

一道不错的DP题,分为几种情况:

1.单字母元素(i)为真:  需要满足条件是:(第i号字母为单元素+第i-1号字母为真)

2.双字母元素(i)为真:  需要满足条件是:(i-1号字母和i号字母组合为元素+第i-2号字母为真)

 

注意,双字母元素的情况我们是令第二个字母为真。

 

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

char map[115][3]={"h","he","li","be","b","c","n","o","f","ne","na","mg","al","si","p","s","cl","ar",
"k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr","rb",
"sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe","cs","ba",
"hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","rf","db",
"sg","bh","hs","mt","ds","rg","cn","fl","lv","la","ce","pr","nd","pm","sm","eu","gd","tb","dy",
"ho","er","tm","yb","lu","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr"};
char word[50001];
int can[1000]={0},dp[50001];

int trans(char s[3])
{
	if(s[1]==0)
		return s[0]-'a';
	return s[0]-'a'+(s[1]-'a'+1)*26;

}

int main()
{
	int T;
	memset(can,0,sizeof(can));
	for(int i=0;i<114;i++)
		can[trans(map[i])]=1;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",word);
		int len=strlen(word);
		memset(dp,0,sizeof(dp));
		for(int i=0;i<len;i++)
			if(word[i]<'a')
				word[i]=word[i]+32;
		char t[3]={0};
		t[0]=word[0];
		if(can[trans(t)])
			dp[0]=1;
		t[0]=word[1];
		if(can[trans(t)] && dp[0])
			dp[1]=1;
		t[0]=word[0];
		t[1]=word[1];
		if(can[trans(t)])
			dp[1]=1;
		for(int i=2;i<len;i++)
		{
			char t[3]={0};
			t[0]=word[i];
			if(can[trans(t)] && dp[i-1])
			dp[i]=1;
			t[0]=word[i-1];
			t[1]=word[i];
			if(can[trans(t)] && dp[i-2])
			dp[i]=1;
		}
		if(dp[len-1])
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

 

 

分享到:
评论

相关推荐

    nenu acm 模板

    nenu acm 模板,虽然不是全部原创,但融合了很多现有模板,并加入了部分自己的东西,全面了模板的注释。

    Nenu python期末作业.zip

    Python学习笔记,复习巩固,作业!!!

    NENU.Nice.抢答器

    本产品是抢答器的V1版本,包括服务端和客户端。服务端包含SocketServer和后台管理系统。后台管理系统有“用户管理”,“题目管理”,“上传题库”,“举办竞赛”等功能。客户端是一个android手机的apk程序,有抢答,...

    NENU_植物系统与进化

    NENU_植物系统与进化

    android launcher

    android launcher4.0 未改动

    联系人信息管理ASP.NET(C#)

    NENU曹毅老师期中作业 ASP.NET(C#)联系人信息管理系统

    FPGA实现VGA的字符显示

    利用FPGA实现VGA显示字符NENU,并且通过按键实现字符的移动,VGA使用ADV7123芯片

    第三周作业 Git和概要设计1

    设计文档请提交到任务2的个人项目仓库中,并可以下载任务2: 创建个人的项目仓库,并把项目仓库的网址URL发到老师邮箱zouxh766@nenu.edu.cn3、

    mac扫描器3.1(nbtscan)注册版

    http://opac.nenu.edu.cn/html/ruanjianxiazai/virus/20080317/533.html tuzi提示,机器号即注册码,这个程序可以在arp爆发的时候准确的获得物理地址和ip地址以及机器名等的对应关系,配合arp 防火墙使用,可以迅速...

    gatsby-simple-starter:我的盖茨比简单入门工具,用于测试

    gatsby-简单启动器 具备网站所需的基本知识的入门者 从您的CLI运行此启动程序(假设已安装Gatsby): gatsby new gatsby-site https://github.com/nenu-git/gatsby-simple-starter 在开发中运行 yarn start

    demo.html

    demo.html

Global site tag (gtag.js) - Google Analytics