博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4432 [COCI2017-2018#2] ZigZag
阅读量:5291 次
发布时间:2019-06-14

本文共 2306 字,大约阅读时间需要 7 分钟。

题意翻译

Zig和Zag正在玩文字游戏。Zig说了一个字母,而Zag说了一个以该字母开头的单词。但是这个词需要出现在给出的单词列表中,并且被是相同首字母中使用的次数最少的单词。如果单词的选择不明确(即相同首字母中使用的次数最少的单词不止一个),那么Zag会选择字典序较小的字母。输入保证对于每个Zig的字母,都有可以选择的单词。

假设有一个由K个不同的单词组成的列表和一个Zig给出的N个字母组成的列表。编写一个程序,根据输入,输出Zag在游戏过程中说出的N个单词。

输入输出格式

输入格式: 第一行输入包含来自的正整数K(1≤K≤100 000)和N(1≤N≤100 000)。

以下K行是K个单词,由小写英文字母组成,不超过21个字母。

以下N行是Zig说的N个小写英文字母。

输出格式: N行,分别对应N个Zig的询问。

 

题目描述

Zig and Zag are playing a word game. Zig says one letter, and Zag says a word that starts with that letter. However, the word needs to be from the allowed word list and such that Zag already said it the least amount of times. If the word choice is ambiguous, then Zag will choose the one that is lexicographically smaller (sooner in the alphabet). For each Zig’s letter, it will be possible to choose a word.

Let there be a list consisting of exactly K distinct words and an array of N letters that Zig has given. Write a program that will, based on the input, output an array of N words that Zag said during the game.

输入格式

The first line of input contains positive integers K (1 ≤ K ≤ 100 000) and N (1 ≤ N ≤ 100 000) from the task.

Each of the following K lines contains a single word consisting of lowercase letters of the English alphabet not longer than 21 characters.

Each of the following N lines contains a single lowercase letter of the English alphabet.

输出格式

You must output N lines, each containing a single word from the task.

输入输出样例

输入 #1复制
4 5zagrebsplitzadarsisakzsszz
输出 #1复制
zadarsisaksplitzagrebzadar
输入 #2复制
5 3londonrimparizmoskvasarajevoprp
输出 #2复制
parizrimpariz
输入 #3复制
1 3zagrebzzz
输出 #3复制
zagrebzagrebzagreb

说明/提示

In test cases worth 60% of total points, it will hold that N and K are smaller than 500.

 

 

#include
#include
#include
#include
#include
#include
using namespace std;string s[30][10005],S;char ch;int n,m,num[30],p[30];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ cin>>S; int bj=S[0]-'a'+1; s[bj][++num[bj]]=S; } for(int i=1;i<=26;i++){ sort(s[i]+1,s[i]+num[i]+1); } while(m--){ ch=getchar(); while(ch<'a'||ch>'z'){ ch=getchar(); } int bj=ch-'a'+1; p[bj]++; if(p[bj]>num[bj]){ p[bj]=1; } cout<
<

  

转载于:https://www.cnblogs.com/xiongchongwen/p/11521781.html

你可能感兴趣的文章
PHP trait
查看>>
Redis的常用命令(三)
查看>>
python 多线程并发threading & 任务队列Queue
查看>>
1_fbauto
查看>>
IO体系、集合体系、多线程、jdbc
查看>>
关于时间:UTC/GMT/xST/ xDT
查看>>
[51Nod1089] 最长回文子串 V2(Manacher算法)
查看>>
Asp.Net生命周期系列六
查看>>
php引用 =& 详解
查看>>
Codeforces 914D Bash and a Tough Math Puzzle (ZKW线段树)
查看>>
POJ 3009: Curling 2.0
查看>>
DLNA介绍(包含UPnP,2011/6/20 更新)
查看>>
ANGULARJS5从0开始(2) - 整合bootstrap和font-awesome
查看>>
Android 使用Parcelable序列化对象
查看>>
Python Web框架Django (零)
查看>>
Foxmail出现 错误信息:553 mailbox not found怎么解决
查看>>
spring_远程调用
查看>>
js 中基本数据类型和引用数据类型 ,,,, js中对象和函数的关系
查看>>
登录服务器,首先用到的5个命令
查看>>
多米诺骨牌
查看>>