CodeForces - 898C(大模拟)

唉,结构体的第0个元素忘了清空,找了半个小时的bug,哭了,必须贴到博客上祭奠一下

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=30;
int n,m;
struct note
{
    string name;
    vector<string> ss;
    bool operator <(const note &p) const
    {
        return name<p.name;
    }
} aa[maxn];
void init()
{
    for(int i=0;i<=25;i++)
    {
        aa[i].ss.clear();

        aa[i].name.clear();
    }

}
int main()
{
    std::ios::sync_with_stdio(false);
    while(cin >> n)
    {
        init();
        int cnt=0;
        string name;
        string num2;
        for(int i=1; i<=n; i++)
        {
            int flag1=0;
            cin >> name;
            for(int j=0; j<cnt; j++)
            {
                if(name==aa[j].name)
                {
                    flag1=1;
                    cin >> m;
                    for(int l=1; l<=m; l++)
                    {
                        cin >> num2;
                        int flag2=0;
                        for(int k=0; k<aa[j].ss.size(); k++)
                        {

                            string num1=aa[j].ss[k];
                            int l1=num1.length();
                            int l2=num2.length();
                            if(l1>l2)
                            {
                                string temp=num1.substr(l1-l2,l2);
                                if(temp==num2)
                                {
                                    flag2=1;
                                    break;
                                }

                            }
                            else
                            {
                                string temp=num2.substr(l2-l1,l1);
                                if(temp==num1)
                                {
                                    aa[j].ss[k]=num2;
                                    flag2=1;
                                    break;
                                }
                            }

                        }
                        if(!flag2) aa[j].ss.push_back(num2);
                    }
                    break;
                }
            }

            if(!flag1)
            {
                aa[cnt].name=name;
                cin >> m;
                for(int l=1; l<=m; l++)
                {
                    cin >> num2;
                    int flag2=0;
                    for(int k=0; k<aa[cnt].ss.size(); k++)
                    {
                        string num1=aa[cnt].ss[k];
                        int l1=num1.length();
                        int l2=num2.length();
                        if(l1>l2)
                        {
                            string temp=num1.substr(l1-l2,l2);
                            if(temp==num2)
                            {
                                flag2=1;
                                break;
                            }

                        }
                        else
                        {
                            string temp=num2.substr(l2-l1,l1);
                            if(temp==num1)
                            {
                                aa[cnt].ss[k]=num2;
                                flag2=1;
                                break;
                            }

                        }
                    }
                    if(!flag2) aa[cnt].ss.push_back(num2);
                }
                cnt++;
            }
        }
        sort(aa,aa+cnt);
        cout << cnt << endl;
        for(int i=0; i<cnt; i++)
        {
            cout << aa[i].name;
            cout << " " << aa[i].ss.size();
            for(int j=0; j<aa[i].ss.size(); j++)
            {
                cout << " " << aa[i].ss[j];
            }
            cout << endl;
        }
    }
    return 0;
}

 

posted on 2017-12-17 18:08  发牌员  阅读(275)  评论(0编辑  收藏  举报

导航