답안 #632351

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
632351 2022-08-19T21:37:40 Z ggoh Languages (IOI10_languages) C++14
96 / 100
8944 ms 85544 KB
#include<bits/stdc++.h>
#include "grader.h"
using namespace std;
typedef long long lint;
typedef unsigned long long ulint;
int V[56][65536];
set<lint>W[56];
set<lint>X[56];
set<ulint>Y[56];
set<__int128>Z[56];
void excerpt(int *E)
{
  int l=0,maxi=0;
  vector<__int128>Q;
  for(int i=0;i<96;i++)
  {
    Q.push_back((__int128)E[i]*65536*65536*65536*65536+1llu*E[i+1]*(1llu<<48)+1llu*E[i+2]*(1llu<<32)+1llu*E[i+3]*(1llu<<16)+E[i+4]);
  }
  for(int j=0;j<56;j++)
  {
    int kind=0;
    for(auto &i:Q)
    {
      if(Z[j].find(i)!=Z[j].end())kind++;
    }
    if(kind>maxi)
    {
      maxi=kind;
      l=j;
    }
  }
  if(maxi==0){
  vector<ulint>P;
  for(int i=0;i<97;i++)
  {
    P.push_back(1llu*E[i]*(1llu<<48)+1llu*E[i+1]*(1llu<<32)+1llu*E[i+2]*(1llu<<16)+E[i+3]);
  }
  sort(P.begin(),P.end());
  P.erase(unique(P.begin(),P.end()),P.end());
  for(int j=0;j<56;j++)
  {
    int kind=0;
    for(auto &i:P)
    {
      if(Y[j].find(i)!=Y[j].end())kind++;
    }
    if(kind>maxi)
    {
      maxi=kind;
      l=j;
    }
  }
  if(maxi==0){
 
  vector<lint>U;
  for(int i=0;i<98;i++)
  {
    U.push_back(1ll*E[i]*(1ll<<32)+1ll*E[i+1]*65536+E[i+2]);
  }
  sort(U.begin(),U.end());
  U.erase(unique(U.begin(),U.end()),U.end());
  for(int j=0;j<56;j++)
  {
    int kind=0;
    for(auto &i:U)
    {
      if(X[j].find(i)!=X[j].end())kind++;
    }
    if(kind>maxi)
    {
      maxi=kind;
      l=j;
    }
  }
  if(maxi==0){
  vector<lint>T;
  for(int i=0;i<99;i++)
  {
    T.push_back(1ll*E[i]*65536+E[i+1]);
  }
  sort(T.begin(),T.end());
  T.erase(unique(T.begin(),T.end()),T.end());
  for(int j=0;j<56;j++)
  {
    int kind=0;
    for(auto &i:T)
    {
      if(W[j].find(i)!=W[j].end())kind++;
    }
    if(kind>maxi)
    {
      maxi=kind;
      l=j;
    }
  }
  if(maxi==0)
  {
    vector<int>S;
    for(int i=0;i<100;i++)S.push_back(E[i]);
    sort(S.begin(),S.end());
    S.erase(unique(S.begin(),S.end()),S.end());
    maxi=-1;
    for(int j=0;j<56;j++)
    {
      int kind=0;
      for(auto &i:S)
      {
        if(V[j][i])kind++;
      }
      if(kind>maxi)
      {
        maxi=kind;
        l=j;
      }
    }
  }
  }
  }
  }
  int L=language(l);
  for(int i=0;i<100;i++)
  {
    V[L][E[i]]++;
  }
  for(int i=0;i<99;i++)
  {
    W[L].insert(1ll*E[i]*65536+E[i+1]);
  }
  for(int i=0;i<98;i++)
  {
    X[L].insert(1ll*E[i]*(1ll<<32)+1ll*E[i+1]*65536+E[i+2]);
  }
  for(int i=0;i<97;i++)
  {
    Y[L].insert(1llu*E[i]*(1llu<<48)+1llu*E[i+1]*(1llu<<32)+1llu*E[i+2]*(1llu<<16)+E[i+3]); 
  }
  for(int i=0;i<96;i++)
  {
    Z[L].insert((__int128)E[i]*65536*65536*65536*65536+1llu*E[i+1]*(1llu<<48)+1llu*E[i+2]*(1llu<<32)+1llu*E[i+3]*(1llu<<16)+E[i+4]);
  }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8704 ms 85544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 8944 ms 85448 KB Output is partially correct - 87.84%