传送门

The Enterprise has encountered a planet that at one point had been inhabited. The only remnant from the prior civilization is a set of texts that was found. Using a small set of keywords found in various different languages, the Enterprise team is trying to determine what type of beings inhabited the planet.

Input

The first line of input will be N (1 ≤ N ≤ 100), the number of different known languages. The next N lines contain, in order, the name of the language, followed by one or more words in that language, separated with spaces. Following that will be a blank line. After that will be a series of lines, each in one language, for which you are to determine the appropriate language. Words consist of uninterrupted strings of upper or lowercase ASCII letters, apostrophes, or hyphens, as do the names of languages. No words will appear in more than one language. No line will be longer than 256 characters. There will be at most 1000 lines of sample text. Every sample text will contain at least one keyword from one of the languages. No sample text will contain keywords from multiple languages. The sample text may contain additional punctuation (commas, periods, exclamation points, semicolons, question marks, and parentheses) and spaces, all of which serve as delimiters separating keywords. Sample text may contain words that are not keywords for any specific language. Keywords should be matched in a case-insensitive manner.

Output

For each line of sample text that follows the blank line separating the defined languages, print a single line that identifies the language with which the sample text is associated.

Sample Input

4

Vulcan throks kilko-srashiv k’etwel

Romulan Tehca uckwazta Uhn Neemasta

Menk e’satta prah ra’sata

Russian sluchilos

Dif-tor heh, Spohkh. I’tah trai k’etwel

Uhn kan’aganna! Tehca zuhn ruga’noktan!

Sample Output

Vulcan

Romulan

Solution

注意Input加粗的部分,我在这里WA了一发。

这题的输入是个坑。首先考虑如何读取Keywords,这可归结为读入一行内的若干字符串

在本题中,一行输入可分为两部分:words(词), delimiters(定界符、分隔符)。

delimiters又分为两种:whitespace characters(空白字符), punctuations(标点)。

keywords部分的输入,delimiters不含puntuations。如果没有读入一行这个设定的话,

char s[];

scanf("%s", s);

就搞定了。加了这个限制,只要把每个word后面的delimiters也读入,看其中是否包含'\n'就好了:

char s[], delim[];

scanf("%s%[ \n]", s, delim);

这里有个地方要特别注意:

在Windows下换行符是'\n\r' (line feed + carriage return),此时按上面代码中的方式读取delimiters就不能读取/r,但Windows下的换行符并不总是'\n\r',也有只是'\n'的情况,可能跟文件的扩展名有关吧,这个问题我暂不清楚。我调试时是从无扩展名的文本文件in读入的,换行符是'\n',不知换成in.txt会如何。但无论如何

char s[], delim[];

scanf("%s%[ \n\r]", s, delim);

都能正确处理。

-------------------------------------------------------------------------------------------------------------

sample text的输入要多考虑punctuations,可如此处理:

char s[], delim[];

scanf("%*[,.!;() \n]"), scanf("%[^,.!;() \n]%[,.!;() \n]", s, delim);

这样写其实有点多余,下面Implementation里的第二份代码给出了另一种做法。

注意这里如果写成

char s[], delim[];

scanf("%*[,.!;() \n]%[^,.!;() \n]%[,.!;() \n]", s, delim);

就错了。(请考虑函数scanf()在什么情况下return)

Implementation

#include <bits/stdc++.h>
using namespace std;
const int N();
map<string, int> mp;
char lang[N][], s[], delim[];
string t; int main(){
int n;
scanf("%d", &n);
for(int i=; i<n; i++){
scanf("%s", lang[i]);
for(bool flag=false; !flag;){
scanf("%s%[ \n]", s, delim);
for(int i=; s[i]; i++)
s[i]=tolower(s[i]);
t=s;
mp[t]=i;
for(int i=; delim[i]; i++)
if(delim[i]=='\n'){
flag=true;
break;
}
}
} for(bool flag=false; scanf("%*[,.!;() \n]"), ~scanf("%[^,.!;() \n]%[,.!;() \n]", s, delim); ){
if(!flag){
for(int i=; s[i]; i++)
s[i]=tolower(s[i]);
t=s;
if(mp.find(t)!=mp.end()){
flag=true;
puts(lang[mp[t]]);
}
}
for(int i=; delim[i]; i++)
if(delim[i]=='\n'){
flag=false;
break;
}
}
}
#include <bits/stdc++.h>
using namespace std;
const int N();
map<string, int> mp;
char lang[N][], s[], delim[];
string t; int main(){
int n;
scanf("%d", &n);
for(int i=; i<n; i++){
scanf("%s", lang[i]);
for(bool flag=false; !flag;){
scanf("%s%[ \n]", s, delim);
for(int i=; s[i]; i++)
s[i]=tolower(s[i]);
t=s;
mp[t]=i;
for(int i=; delim[i]; i++)
if(delim[i]=='\n'){
flag=true;
break;
}
}
}
scanf("%*[,.!;() \n]");
for(bool flag=false; ~scanf("%[^,.!;() \n]%[,.!;() \n]", s, delim); ){
if(!flag){
for(int i=; s[i]; i++)
s[i]=tolower(s[i]);
t=s;
if(mp.find(t)!=mp.end()){
flag=true;
puts(lang[mp[t]]);
}
}
for(int i=; delim[i]; i++)
if(delim[i]=='\n'){
flag=false;
break;
}
}
}

UVALive 6523 Languages的更多相关文章

  1. UVALive - 4108 SKYLINE[线段树]

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

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

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

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

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

  4. PLoP(Pattern Languages of Programs,程序设计的模式语言)

    2014/8/1 12:24:21潘加宇 http://www.umlchina.com/News/Content/340.htmPloP大会2014即将举行 PLoP(Pattern Languag ...

  5. Natural language style method declaration and usages in programming languages

    More descriptive way to declare and use a method in programming languages At present, in most progra ...

  6. ECSHOP \admin\edit_languages.php GETSHELL Based On Injection PHP Code Into /languages/zh_cn/user.php

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于很多CMS网站来说,它们都需要保存很多的网站META信息,最常用的最佳实践是以 ...

  7. 思维 UVALive 3708 Graveyard

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

  8. Scripting Languages

    Computer Science An Overview _J. Glenn Brookshear _11th Edition A subset of the imperative programmi ...

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

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

随机推荐

  1. 2666 Accept Ratio(打表AC)

    2666 Accept Ratio  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 某陈痴迷 ...

  2. XXOOJL

    她的鞋子放在外面没拿进来很显眼,我们俩正抱在床上,刚做完什么也没穿,她也没擦.听到门外的脚步声.赶紧穿.她在我房间里没出声,但我父亲肯定看出来了.于是问我:母亲去哪了,然后他去找她. 太尴尬了,那晚我 ...

  3. Uploadify v3.2.1 属性、事件、方法说明

    一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass " 按钮样式 buttonCur ...

  4. 在WebApi中实现Cors访问

    Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法,对于B网站和C网站 ...

  5. 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)

    在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?    为了 ...

  6. 传智播客C++第五期培训视频教程免费下载

    C/C++的应用领域几乎无处不在,服务器,嵌入式,物联网,移动互联网,信息安全,游戏,基本上大小通吃.C/C++市场份额高达26%,也就是每四个程序员就有一个C/C++程序员.市场需求量非常大,而且工 ...

  7. 20135316王剑桥 linux第二周课实验笔记

    Linux中命令格式为: command [options选项] [arguments参数] //中括号代表是可选的,即有些命令不需要选项也不需要参数 ls或ls .显示是当前目录的内容,这里“.”就 ...

  8. 工作随笔——CentOS6.4支持rz sz操作

    yum一句话解决: yum -y install lrzsz

  9. 如何使用Iveely的数据存储引擎 Iveely Database

    Iveely 数据存储引擎是为Iveely 搜索引擎提供数据存储的机制. 适用于:频繁数据插入.数据读取.数据更改或者删除数据不适合Iveely Database,存储结构是按照搜索引擎数据存储要求( ...

  10. 4G时代的抢钱之道

    最近最大的事件恐怕就是移动的4G上线了,50元600M起计价,上网速度最高理论到达100Mbps,相当于一秒下载10MB的数据,或者是一分钟下载一张VCD(600M)电影. 当然,对于这样的流量套餐, ...