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; }