UVa 409 Excuses, Excuses!
哈哈,虽然是一道字符串水题,可是拿到一个1A还是很开心的!
题意就是给一些keywords(子串)和Excuse(母串),然后输出包含keywords最多的Excuse,如果相等的话,按任意顺序全部输出即可。
解题时有几点需要注意:
1、一个keyword可能在Excuse里重复多次。
2、每个keyword的左右两端必须是行首或行尾或不是字母的字符。
3、Excuse里貌似是不区分大小写的,所以读入所有的Excuse后需要再memcpy一份,把那份用来全部转化为大写或小写,原来的那份作输出用。
Excuses,Excuses!
Judge Ito is having a problem with people subpoenaed for jury duty giving rather lame excuses in order to avoid serving. In order to reduce the amount of time required listening to goofy excuses, Judge Ito has asked that you write a program that will search for a list of keywords in a list of excuses identifying lame excuses. Keywords can be matched in an excuse regardless of case.
Input
Input to your program will consist of multiple sets of data.
- Line 1 of each set will contain exactly two integers. The first number (  ) defines the number of keywords to be used in the search. The second number ( ) defines the number of keywords to be used in the search. The second number ( ) defines the number of excuses in the set to be searched. ) defines the number of excuses in the set to be searched.
- Lines 2 through K+1 each contain exactly one keyword.
- Lines K+2 through K+1+E each contain exactly one excuse.
- All keywords in the keyword list will contain only contiguous lower case alphabetic characters of length L (  ) and will occupy columns 1 through L in the input line. ) and will occupy columns 1 through L in the input line.
- All excuses can contain any upper or lower case alphanumeric character, a space, or any of the following punctuation marks [SPMamp".,!?&] not including the square brackets and will not exceed 70 characters in length.
- Excuses will contain at least 1 non-space character.
Output
For each input set, you are to print the worst excuse(s) from the list.
- The worst excuse(s) is/are defined as the excuse(s) which contains the largest number of incidences of keywords.
- If a keyword occurs more than once in an excuse, each occurrance is considered a separate incidence.
- A keyword ``occurs" in an excuse if and only if it exists in the string in contiguous form and is delimited by the beginning or end of the line or any non-alphabetic character or a space.
For each set of input, you are to print a single line with the number of the set immediately after the string ``Excuse Set #". (See the Sample Output). The following line(s) is/are to contain the worst excuse(s) one per line exactly as read in. If there is more than one worst excuse, you may print them in any order.
After each set of output, you should print a blank line.
Sample Input
5 3
dog
ate
homework
canary
died
My dog ate my homework.
Can you believe my dog died after eating my canary... AND MY HOMEWORK?
This excuse is so good that it contain 0 keywords.
6 5
superhighway
crazy
thermonuclear
bedroom
war
building
I am having a superhighway built in my bedroom.
I am actually crazy.
1234567890.....,,,,,0987654321?????!!!!!!
There was a thermonuclear war!
I ate my dog, my canary, and my homework ... note outdated keywords?
Sample Output
Excuse Set #1
Can you believe my dog died after eating my canary... AND MY HOMEWORK? Excuse Set #2
I am having a superhighway built in my bedroom.
There was a thermonuclear war!
//#define LOCAL
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; char key[][];
char excuse1[][], excuse2[][];
int sum[];//存放每个excuse中keywords出现的总次数 int match(char s1[], char s2[]); int main(void)
{
#ifdef LOCAL
freopen("409in.txt", "r", stdin);
#endif
int k, e, i, kase = , j;
while(scanf("%d %d", &k, &e) == )
{
++kase;
getchar();
for(i = ; i < k; ++i)
gets(key[i]);
for(i = ; i < e; ++i)
{
gets(excuse1[i]);
memcpy(excuse2[i], excuse1[i], sizeof(excuse1[i]));
for(j = ; j < strlen(excuse2[i]); ++j)
excuse2[i][j] = tolower(excuse2[i][j]);//将所有字母转化为小写
} memset(sum, , sizeof(sum));
int maxn = ;
for(i = ; i < e; ++i)
{
for(j = ; j < k; ++j)
{
sum[i] += match(excuse2[i], key[j]);
}
if(sum[i] > maxn)
maxn = sum[i];
} cout << "Excuse Set #" << kase << endl;
for(i = ; i < e; ++i)
{
if(sum[i] == maxn)
cout << excuse1[i] << endl;
}
cout << endl;
}
return ;
}
int match(char s1[], char s2[])
{
int i = , l1, l2, count = , j;
l1 = strlen(s1);
l2 = strlen(s2);
while(i + l2 < l1)//一个关键词可能匹配多次
{
int j = i, k = ;
if((i==||s1[i-]<'a'||s1[i-]>'z') &&
(i+l2==l1)||s1[i+l2]<'a'||s1[i+l2]>'z')//保证所匹配的单词能被分隔开
{
for(; k < l2; ++j, ++k)
{
if(s1[j] != s2[k])
break;
}
if(k == l2)
++count;
}
++i;
}
return count;
}
代码君
UVa 409 Excuses, Excuses!的更多相关文章
- Problem B: Excuses, Excuses!
		Description Judge Ito is having a problem with people subpoenaed for jury duty giving rather lame ex ... 
- 【HDOJ】1606 Excuses, Excuses!
		简单字符串. #include <cstdio> #include <cstring> #define MAXLEN 105 #define MAXN 25 char keys ... 
- UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494
		白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ... 
- UVa409_Excuses, Excuses!(小白书字符串专题)
		解题报告 题意: 找包括单词最多的串.有多个按顺序输出 思路: 字典树爆. #include <cstdio> #include <cstring> #include < ... 
- UVA题目分类
		题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ... 
- Volume 1. String(uva)
		10361 - Automatic Poetry #include <iostream> #include <string> #include <cstdio> # ... 
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 1(String)
		第一题:401 - Palindromes UVA : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8 ... 
- POJ题目细究
		acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ... 
- HOJ题目分类
		各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ... 
随机推荐
- 抛弃jQuery 深入原生的JavaScript
			虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile ... 
- JS对象类型的确定
			JS是松散类型的语言,这一点JS的对象表现得尤为突出.那么如何来确定JS对象的具体类型呢? 首先,我们可以使用typeof运算符确定其基本类型(number,object,function,undef ... 
- Ruby Profiler 详解之 ruby-prof(I)
			项目地址: ruby-prof 在上一篇 Ruby 中的 Profiling 工具中,我们列举了几种最常用的 Profiler,不过只是简单介绍,这一次详细介绍一下 ruby-prof 的使用方法. ... 
- Javascript学习笔记1  数论
			1.Javascript不用担心内存的回收与对象的销毁! 2.Javascript有:±infinity.NaN全局变量表示 被0整除的±无穷 和 非数字.undefined和null表示 未定义 和 ... 
- ZOJ 3555	Ice Climber(dp)
			晦涩的题意+各种傻逼害我调了那么久,实际上题目就是一个dp[i][j],dp[i][j]表示第i层第j个最少需要多少时间,当我们去更新dp[i][j]的时候,考虑的是从第i+1层的某一个dp[i+1] ... 
- 简明Vim练级攻略(转)
			前言今天看到这篇文章,共鸣点非常多.它把Vim使用分为4个级别,目前我自己是熟练运用前面三级的命令,在培养习惯使用第四级.完全就是我这一年来坚持使用Vim的过程.所以不管怎么我要转载这篇文章.翻译自& ... 
- Java常用类库
			System System:类中的方法和属性都是静态的. out:标准输出,默认是控制台. in:标准输入,默认是键盘. System描述系统一些信息.获取系统属性信息:Properties getP ... 
- selenium测试框架篇
			做自动化框架,不可避免的就是对象库. 有一个好的对象库,可以让整个测试体系: 更容易维护 大大增加代码重用 增加测试系统的稳定性 这里先了解一下我所说的对象库: 所谓的页面对象,是指每一个真是的页面是 ... 
- 李洪强iOS开发之OC语言基础知识
			OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ... 
- 李洪强iOS开发之OC[009] -OC无参方法的声明实现和调用
