洛谷P2264 情书

P2264 情书

    • 88通过
    • 971提交
  • 题目提供者lin_toto
  • 标签字符串
  • 难度提高+/省选-

提交该题 讨论 题解 记录

最新讨论

  • yyy快把题目改回来
  • 这题的题目好逗啊。。。
  • 情书std

题目背景

一封好的情书需要撰写人全身心的投入。崔君阳同学看上了一中的许芳煜想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。

PS:御坂 美琴・高坂 穂乃果・アズキ・ワニら・チョコラ最高!

题目描述

为了帮助他,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:

1.在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每一单词在同一句话中出现多次感动值不叠加,不同单词不受影响。保证输入的单词不重复。

2.每句话以英文句号定界。

3.全文不区分大小写。

输入输出格式

输入格式:

第一行包含一个数字n,表示导致感动值提升的词汇列表中单词的数量,随后n行是给定单词,每行一个。保证单词只包含英文字母。

最后一行为情书正文,保证只包含以下几种字符: 英文字母、数字、空格、英文逗号、英文句号。

输出格式:

一个数字g,表示情书带来的感动值。

输入输出样例

输入样例#1:
3
love
so
much
I love you so much.
输出样例#1:
3

说明

对于所有的数据,保证1 ≤ n,m,k ≤ 100,每个单词不超过50字符,全文不超过1000字符。

分析:读懂题目非常关键,单词是连续出现的,而不是寻找子串,而且单词之间会有符号分割,左右用string保存,不断地更新string,然后与每个没有出现过的单词进行比对即可,要注意这种字符串的题目大多都有一个enter在输入里,所以在输入情书之前要加上一个getchar()来过滤enter.

#include <cstdio>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 110;

int vis[maxn],ans,n;
string s[maxn],sentence;

string zhuanhuan(string x)
{
    for (int i = 0; i < x.size(); i++)     //统一将大写转换为小写
        if (x[i] >= 'A' && x[i] <= 'Z')
            x[i] = x[i] - 'A' + 'a';
    return x;
}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        cin >> s[i];
    getchar();   //读取enter.
    getline(cin, sentence);
    for (int i = 0; i < sentence.size(); i++)
    {
        if (sentence[i] == '.')
            memset(vis, 0, sizeof(vis));
        else
            if (sentence[i] != ' ' && sentence[i] != ',')
            {
            string temp;
            for (; sentence[i] != ' ' && sentence[i] != ',' && sentence[i] != '.'; i++)
                temp += sentence[i];
            i--;
            for (int j = 1; j <= n; j++)
                if (zhuanhuan(temp) == zhuanhuan(s[j]) && !vis[j])
                {
                ans++;
                vis[j] = 1;
                break;
                }
            }
    }
    printf("%d
", ans);

    return 0;
}
原文地址:https://www.cnblogs.com/zbtrs/p/5837844.html