大家好,我不喜欢 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;
}
总结
认真读题真的很重要。
标签:p2,ch,题解,ll,p1,include,Dima,CF358B,buf From: https://www.cnblogs.com/xhqdmmz/p/18127558