题意
给出 $n(n\le 100)$ 个单词,求一段长度不超过 $1000$ 的情书中出现了多少次这些单词,一句话中只统计一次。
题解
小清新模拟题,用 map
标记给出的单词以及当前这句话里是否出现过。
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
char ch=getchar(); int f=1,x=0;
while (ch<'0' || ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
while (ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
return f*x;
}
int n,ans;
string s,x;
map <string,bool> mp,in;
inline void work(string x) //统计 x 答案
{
if (!in[x]) return;
if (!mp.count(x)) ans++;
mp[x]=1;
}
signed main()
{
n=read();
for (int i=1;i<=n;i++)
{
cin>>s;
int len=s.length();
for (int i=0;i<len;i++) s[i]=tolower(s[i]);
in[s]=1;
}
while (cin>>x)
{
int len=x.length();
for (int i=0;i<len;i++) x[i]=tolower(x[i]);
int st=0; //当前单词的起点
for (int i=0;i<len;i++)
{
if (x[i]=='.' || x[i]==',')
{
string cur=x.substr(st,i-st);
work(cur);
if (x[i]=='.') mp.clear();
st=-1;
}
else if (st==-1) st=i;
}
if (st!=-1) work(x.substr(st,len-st)); //还有剩余单词需要处理
}
return !printf("%d",ans);
}