Ranking (as of 2013-03-23): 109
Language: C++
/*
UVa 10887 - Concatenation of Languages
To build using Visual Studio 2008:
cl -EHsc -O2 concatenation_of_languages.cpp
*/
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
long long convert_to_ll(const string& s)
{
long long ll = 0;
for (int i = 0, j = s.length(); i < j; i++)
ll |= static_cast<long long>(s[i] - 'a' + 1) << (i * 5);
return ll;
}
pair<long long, long long> concatenate_to_ll(const pair<int, long long>& s,
const string& t)
{
long long ll = 0;
int i = 0, j = min(10 - s.first, static_cast<int>(t.length()));
for ( ; i < j; i++)
ll |= static_cast<long long>(t[i] - 'a' + 1) << (i * 5);
long long hl = 0;
for (j = 0; i < t.length(); i++, j++)
hl |= static_cast<long long>(t[i] - 'a' + 1) << (j * 5);
return make_pair(s.second | (ll << (s.first * 5)), hl);
}
int main()
{
string s;
getline(cin, s);
istringstream iss(s);
int t;
iss >> t;
iss.clear();
for (int c = 0; c < t; c++) {
getline(cin, s);
iss.str(s);
int m, n;
iss >> m >> n;
iss.clear();
vector< pair<int, long long> > vs(m);
for (int i = 0; i < m; i++) {
getline(cin, s);
vs[i] = make_pair(s.length(), convert_to_ll(s));
}
set< pair<long long, long long> > ss;
for (int i = 0; i < n; i++) {
getline(cin, s);
for (int j = 0; j < m; j++)
ss.insert(concatenate_to_ll(vs[j], s));
}
cout << "Case " << c + 1 << ": " << ss.size() << endl;
}
return 0;
}
No comments:
Post a Comment