# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
501828 | fabijan_cikac | Cards (LMIO19_korteles) | C++17 | 835 ms | 36296 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int N = 1e6;
const int M = 30;
int n;
map<string, ll> m;
ll sol = 0;
vector<string> v;
int g[N][M] = { 0 };
int kounter = 2;
int vel[N] = { 0 };
ll dio(string a, string b){
for (int i = 0; i < a.size(); ++i){
if (a[i] != '*' && a[i] != b[i])
return 0;
}
return 1;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n; v.resize(n);
for (int i = 0; i < n; ++i){
string b; cin >> v[i] >> b;
v[i].push_back(b[1]); v[i].push_back(b[0]);
for (int j = 0; j < 16; ++j){
string s;
for (int k = 0; k < 4; ++k){
if (j & (1 << k))
s.push_back(v[i][k]);
else s.push_back('*');
}
int x = 1;
for (int k = 0; k < 4; ++k){
if (s[k] == '*' && g[x][M - 1] == 0){
g[x][M - 1] = kounter; ++kounter;
x = g[x][M - 1];
}
else if (s[k] != '*' && g[x][int(s[k]) - 65] == 0){
g[x][int(s[k]) - 65] = kounter;
x = kounter; ++kounter;
}
else{
if (s[k] == '*')
x = g[x][M - 1];
else x = g[x][int(s[k]) - 65];
}
}
++vel[x];
}
}
for (int j = 0; j < n; ++j){
string a = v[j]; string s = "****";
for (int i = 1; i < 16; ++i){
s = "****"; int cnt = 0;
if (i & 1){
if ((s[3] != '*' && s[3] != a[0]) || (s[2] != '*' && s[2] != a[1]))
continue;
s[3] = a[0]; s[2] = a[1]; ++cnt;
}
if (i & 2){
if ((s[0] != '*' && s[0] != a[1]) || (s[3] != '*' && s[3] != a[2]))
continue;
s[0] = a[1]; s[3] = a[2]; ++cnt;
}
if (i & 4){
if ((s[0] != '*' && s[0] != a[3]) || (s[1] != '*' && s[1] != a[2]))
continue;
s[0] = a[3]; s[1] = a[2]; ++cnt;
}
if (i & 8){
if ((s[1] != '*' && s[1] != a[0]) || (s[2] != '*' && s[2] != a[3]))
continue;
s[1] = a[0]; s[2] = a[3]; ++cnt;
}
int x = 1;
for (int k = 0; k < 4; ++k){
if (s[k] == '*')
x = g[x][M - 1];
else x = g[x][int(s[k]) - 65];
}
if (x == 0)
continue;
if (cnt & 1)
sol += (vel[x] - dio(s, a));
else sol -= (vel[x] - dio(s, a));
}
}
cout << sol / 2;
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |