답안 #501826

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
501826 2022-01-04T16:10:37 Z fabijan_cikac Cards (LMIO19_korteles) C++17
55 / 100
540 ms 69940 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long int ll;

const int N = 26 * 26 * 26 * 26 + 1000;
const int M = 28;

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

korteles.cpp: In function 'll dio(std::string, std::string)':
korteles.cpp:19:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     for (int i = 0; i < a.size(); ++i){
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 316 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 320 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 316 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 320 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
5 Correct 0 ms 332 KB Output is correct
6 Correct 1 ms 1228 KB Output is correct
7 Correct 3 ms 716 KB Output is correct
8 Correct 5 ms 2764 KB Output is correct
9 Correct 5 ms 1748 KB Output is correct
10 Correct 5 ms 1996 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 434 ms 69940 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 80 ms 16876 KB Output is correct
3 Correct 540 ms 27984 KB Output is correct
4 Correct 264 ms 23340 KB Output is correct
5 Correct 342 ms 23308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 1 ms 1228 KB Output is correct
3 Correct 3 ms 716 KB Output is correct
4 Correct 5 ms 2764 KB Output is correct
5 Correct 5 ms 1748 KB Output is correct
6 Correct 5 ms 1996 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 0 ms 316 KB Output is correct
9 Correct 1 ms 320 KB Output is correct
10 Correct 1 ms 320 KB Output is correct
11 Correct 1 ms 460 KB Output is correct
12 Runtime error 434 ms 69940 KB Execution killed with signal 11
13 Halted 0 ms 0 KB -