Submission #1336874

#TimeUsernameProblemLanguageResultExecution timeMemory
1336874monaxiaLanguages (IOI10_languages)C++20
0 / 100
2478 ms327680 KiB
#include <bits/stdc++.h>
#include <ext/random>
#include <ext/pb_ds/assoc_container.hpp>
#include "grader.h"
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
 
#define pb push_back
#define ppb pop_back
#define fr first
#define sc second
#define all(v) v.begin(), v.end()
#define vektor vector
 
using namespace std;
using namespace __gnu_pbds;
 
using ll = long long;
using ull = unsigned ll;
using ld = long double;
 
constexpr ull Mod = 1e9 + 7;
constexpr ull Mod2 = 1 + 7 * 17 * (1 << 23);
constexpr ull sqr = 320;
constexpr ld eps = 1e-12;
 
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll random(ll l, ll r) {if(l <= r) return uniform_int_distribution <ll> (l, r)(rng); return -1;}

gp_hash_table <int, ll> f[56], cnt, tot;
ll p[100], a[100], b[100], c[100], d[100];
int cntt = 0;
int cur = 0, ans = 0;

// int language(ll l){
//     if(l == cur) ans ++;
//     return cur;
// }

void excerpt(int e[100]){
    cntt ++;

    if(cntt == 1){
        p[0] = 1;
        for(int i = 1; i <= 99; i ++) p[i] = p[i - 1] * 1.01;
    }

   for(int i = 0; i < 99 - 3; i ++){
        a[i] = e[i];
        b[i] = (a[i] << 16 + e[i + 1]) % Mod;
        c[i] = (b[i] << 16 + e[i + 2]) % Mod;
        d[i] = (c[i] << 16 + e[i + 3]) % Mod;
    }
    
    pair <ll, int> ans = {0, 0};
    
    for(int i = 0; i <= 55; i ++){
        ll curr = 0;
       for(int j = 0; j < 99 - 3; j ++){
            curr += f[i][a[j]] * 2;
            curr += f[i][b[j]];
            curr += f[i][c[j]] * 4;
            curr += f[i][d[j]];
       } 
       
        ans = max(ans, {curr, i});
    }
    
    ans.sc = language(ans.sc);
    
    for(int i = 0; i < 99 - 3; i ++){
        f[ans.sc][a[i]] ++;
        f[ans.sc][b[i]] ++;
        f[ans.sc][c[i]] ++;
        f[ans.sc][d[i]] ++;
        
        cnt[a[i]] ++;
        cnt[b[i]] ++;
        cnt[c[i]] ++;
        cnt[d[i]] ++;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...