Advertisement
Guest User

Timus 1414

a guest
Nov 4th, 2010
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include<iostream>
  2. #include<set>
  3. #include<vector>
  4. #include<cstdio>
  5. #include<cstdlib>
  6. #include<string>
  7. #include<map>
  8. using namespace std;
  9.  
  10. struct TINT {
  11.     int no;
  12. };
  13.  
  14. vector<string> ss;
  15. map<long long,set<TINT> > mp;
  16. set<TINT>::iterator it;
  17. vector<long long> p_pow(21);
  18.  
  19. bool operator < (const TINT a,const TINT b) {
  20.     return (ss[a.no]<ss[b.no]);
  21. }
  22.  
  23. int i,j,k;
  24.  
  25. int main() {
  26.     //freopen("input.txt","rt",stdin);
  27.     //freopen("output.txt","wt",stdout);
  28.     string str;
  29.     p_pow[0]=1;
  30.     for (i=1;i<=20;i++)
  31.         p_pow[i]=p_pow[i-1]*43;
  32.     str="?sun"; ss.push_back("sun");
  33.     TINT cur; cur.no=0;
  34.     long long hs=0;
  35.     for (i=0;i<4;i++) {
  36.         if (str[i]>='a' && str[i]<='z')
  37.             hs+=(str[i]-'a'+1)*p_pow[i];
  38.         else if (str[i]>='0' && str[i]<='9')
  39.             hs+=(str[i]-'0'+1+26)*p_pow[i];
  40.         else if (str[i]=='?')
  41.             hs+=(str[i]-'?'+1+11+26)*p_pow[i];
  42.         mp[hs].insert(cur);
  43.     }
  44.     while (cin >> str) {
  45.         if (str.length()==0) break;
  46.         if (str[0]=='?') {
  47.             long long hs=0;
  48.             string str2="";
  49.             for (i=0;i<str.length();i++) {
  50.                 if (str[i]>='a' && str[i]<='z')
  51.                     hs+=(str[i]-'a'+1)*p_pow[i];
  52.                 else if (str[i]>='0' && str[i]<='9')
  53.                     hs+=(str[i]-'0'+1+26)*p_pow[i];
  54.                 else if (str[i]=='?')
  55.                     hs+=(str[i]-'?'+1+11+26)*p_pow[i];
  56.                 if (i>0) str2+=str[i];
  57.             }
  58.             cout << str2 << endl;
  59.             if (mp[hs].size()!=0) {
  60.                 it=mp[hs].begin(); k=0;
  61.                 while (it!=mp[hs].end()) {
  62.                     TINT cur=*it;
  63.                     cout << "  " << ss[cur.no] << endl;
  64.                     it++; k++;
  65.                     if (k==20 || it==mp[hs].end()) break;
  66.                 }
  67.             }
  68.         } else {
  69.             long long hs=0;
  70.             string str2=""; str[0]='?';
  71.             for (i=0;i<str.length();i++) {
  72.                 if (str[i]>='a' && str[i]<='z')
  73.                     hs+=(str[i]-'a'+1)*p_pow[i];
  74.                 else if (str[i]>='0' && str[i]<='9')
  75.                     hs+=(str[i]-'0'+1+26)*p_pow[i];
  76.                 else if (str[i]=='?')
  77.                     hs+=(str[i]-'?'+1+11+26)*p_pow[i];
  78.                 if (i>0) str2+=str[i];
  79.             }
  80.             if (mp[hs].size()==0) {
  81.                 ss.push_back(str2);
  82.                 TINT cur; cur.no=ss.size()-1;
  83.                 long long hs=0;
  84.                 for (i=0;i<str.length();i++) {
  85.                     if (str[i]>='a' && str[i]<='z')
  86.                         hs+=(str[i]-'a'+1)*p_pow[i];
  87.                     else if (str[i]>='0' && str[i]<='9')
  88.                         hs+=(str[i]-'0'+1+26)*p_pow[i];
  89.                     else if (str[i]=='?')
  90.                         hs+=(str[i]-'?'+1+11+26)*p_pow[i];
  91.                     mp[hs].insert(cur);
  92.                 }
  93.             }
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement