# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
357560 | blue | PIN (CEOI10_pin) | C++17 | 36 ms | 10476 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 <iostream>
#include <vector>
using namespace std;
/*
There are 36^4 = 1679616 possibilities for the PIN.
Let them be numbered from 0 to 1679615.
Two PINS have one difference if their
*/
int adj(char c)
{
if(c == '0') return 1;
else if('1' <= c && c <= '9') return (c - '1') + 2;
else return (c - 'a') + 11;
}
int ct[37][37][37][37];
int main()
{
int N, D;
cin >> N >> D;
string S;
vector< vector<int> > T(N, vector<int>(4));
for(int i = 0; i < N; i++)
{
cin >> S;
for(int j = 0; j < 4; j++) T[i][j] = adj(S[j]);
for(int mask = 0; mask < (1 << 4); mask++)
{
ct[(mask & (1 << 0)) ? T[i][0] : 0]
[(mask & (1 << 1)) ? T[i][1] : 0]
[(mask & (1 << 2)) ? T[i][2] : 0]
[(mask & (1 << 3)) ? T[i][3] : 0]++;
}
}
long long res = 0;
vector<int> X;
if(D == 1)
{
for(int i = 0; i < N; i++)
{
X = T[i];
res += ct[0][X[1]][X[2]][X[3]];
res += ct[X[0]][0][X[2]][X[3]];
res += ct[X[0]][X[1]][0][X[3]];
res += ct[X[0]][X[1]][X[2]][0];
res -= 4 * ct[X[0]][X[1]][X[2]][X[3]];
}
}
else if(D == 2)
{
for(int i = 0; i < N; i++)
{
X = T[i];
res += ct[0][0][X[2]][X[3]];
res += ct[0][X[1]][0][X[3]];
res += ct[0][X[1]][X[2]][0];
res += ct[X[0]][0][0][X[3]];
res += ct[X[0]][0][X[2]][0];
res += ct[X[0]][X[1]][0][0];
res -= 3 * ct[0][X[1]][X[2]][X[3]];
res -= 3 * ct[X[0]][0][X[2]][X[3]];
res -= 3 * ct[X[0]][X[1]][0][X[3]];
res -= 3 * ct[X[0]][X[1]][X[2]][0];
res += 6 * ct[X[0]][X[1]][X[2]][X[3]];
}
}
res /= 2;
cout << res << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |