SDNUOJ1099前缀判断(set)

来源:互联网 发布:淘宝网投诉电话转人工 编辑:程序博客网 时间:2024/06/01 09:42

SDNU_ICPC1099
题意:给定 n 个字符串,求有多少字符串是其他字符串的前缀。1 <= n <= 1000,每行一个字符串,字符串只由26个小写字母组成,最大长度为100。
注意两个相同的字符串互为前缀
(一)用set做的版本
思路:
定义一个字符串类型的数组(不知道这样用好不好Ծ‸Ծ)然后把每一串字符串的前缀们写出来放到一个容器里若输入的字符串里有这个容器中的元素那么他就是前缀
代码

#include<cstdio>#include<set>#include<cstring>#include<iostream>using namespace std;int main(){    int n,sum=0;    string x;    string s[1200];    cin>>n;    set<string> se;//定义一个容器用来装前缀    set<string> all;//装所有输入的字符串    set<string> cop;//这个是之前出现过的装一下    for(int i=0;i<n;i++)//跑个循环输入所有字符串并且都装到all容器里        {            cin>>s[i];            if(all.count(s[i])!=0)//输入字符串已经出现过                cop.insert(s[i]);//就把它存到cop里            all.insert(s[i]);//把输入的字符串存到容器里            for(int j=1;j<s[i].length();j++)//跑个循环存一下每个字符串的所有前缀            {                x=s[i].substr(0,j);//截取                se.insert(x);然后把截取部分搁到容器里            }        }        for(int i=0;i<n;i++)            {                if(se.count(s[i])!=0)sum+=1;//如果字符串在前缀容器里那么他就是其他字符串的前缀,就加一                else if(cop.count(s[i]))sum+=1;//如果不是并且是重复出现的那么他也是前缀,也加一            }            cout<<sum<<endl;    return 0;}这个真的要考虑全面...刚开始忘了去重,然后又搞多了,在前面判断重了就直接给sum加一了,忘了后面还有可能重复加上他emmmmm所以要把重了的先屯起来到下面跟前缀们一起判断(二)未完待续,还有一个代码没搞出来......
原创粉丝点击