CF358B Dima and Text Messages 题解

大家好,我不喜欢 string,所以我选择用 char 来写。

题目传送门,但不是洛谷。

吐槽一下,这个翻译翻译的并不好,翻译中并没有说明“爱心”是指 <3,还是得去自己翻。

正文

将读入的单词连在一起,并穿插爱心,注意这里首尾都是爱心,需要手动补充。最后将得到的序列与输入的字符串进行比对即可。

关于样例 \(2\)

在样例 \(2\) 中,输出 no 并不是因为前面多了一个 the,而是因为输入的字符串中没有 no 这个单词。题目中第三步是“在句子的任意地方插入字符”,因此多出来的 the 是第三步操作得来的,故无影响。

代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#define ll long long
#define inf 0x3f3f3f3f
#define fr(i , a , b) for(ll i = a ; i <= b ; ++i)
#define fo(i , a , b) for(ll i = a ; i >= b ; --i)
#pragma comment(linker , "/stack : 200000000")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
inline char gchar()
{
    static char buf[1000000] , *p1 = buf , *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf , 1 , 1000000 , stdin) , p1 == p2) ? EOF : *p1++;
}
inline ll read()
{
    ll x = 0 , f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9')
	{
        if(ch == '-')
        {
        	f = -1;
		}
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
	{
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}
ll n;
char s[1100000] , in[1100000] , s1[1100000];
ll len_in , len , o;
signed main()
{
	n = read();
	in[o++] = '<';
	in[o++] = '3';
	fr(i , 1 , n)
	{
		scanf("%s" , &s);
		len_in = strlen(s);
		fr(i , 0 , len_in - 1)
		{
			in[o] = s[i];
			o++;
		}
		in[o++] = '<';
		in[o++] = '3';
	}
	scanf("%s" , s1);
	ll k = 0;
	len = strlen(s1);
	fr(i , 0 , len - 1)
	{
		if(in[k] == s1[i])
		{
			k++;
		}
	}
	if(o == k)
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}
   	return 0;
}

总结

认真读题真的很重要。

posted @ 2024-04-10 21:43  心海秋的墨木仄  阅读(4)  评论(0编辑  收藏  举报