답안 #64477

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64477 2018-08-04T15:58:56 Z alenam0161 Languages (IOI10_languages) C++17
85 / 100
612 ms 2980 KB
#include <stdlib.h>
#include <stdio.h>
#include "grader.h"
#include <bits/stdc++.h>
using namespace std;
#define SZ 100
#define Sc 56
#define LN 65535
int t=0;
int oc[Sc+1][LN+1];
double good[SZ];
int hw[Sc+1];
void New(int *x,int ps=-1){
    if(ps>=t){
        ps=t;++t;
    }
    else{
        if(ps==-1){
            if(t==56){
                pair<int,int> sw={-1,-1};
               for(int i=0;i<t;++i){
                    sw=max(sw,{good[i],i});
               }
               ps=sw.second;
            }
            else{
            ps=t;t++;
            }
        }
    }
    for(int i=0;i<SZ;++i){
        oc[ps][x[i]]++;
    }
    hw[ps]++;
}
int hwq=0;
bool fx[SZ+1];
double tok(int x,int y){
    return (100.0*(x))/double(y);
}
void excerpt(int *E) {
   hwq++;
  // cout<<hwq<<endl;
 //  if(hwq==50)exit(0);
   if(hwq==1){
      int x=language(0);
      New(E,x);
      return;
   }
   for(int i=0;i<t;++i)good[i]=0.0;
   int pr=0;
   int q=0;
   for(int i=0;i<SZ;++i){
      //  if(E[i]==32)continue;
        pr++;
        double hv=0.0;
        bool h=0;
        for(int j=0;j<t;++j){
            if(hw[j]!=0)
            hv+=(double)oc[j][E[i]]/(double(hw[j])),h=true;
        }
        if(h==false){
            q++;
        }
        if(hv>0){
            for(int j=0;j<t;++j){
                if(hw[j]!=0){
                double d=(double)oc[j][E[i]]/(double(hw[j]));
                good[j]+=(d/hv);
                }
            }
        }
   }
    double all = 0.0;
    for(int i=0;i<t;++i){
        all+=good[i];
    }
    pair<double,int> ld=make_pair(-1,0);
    for(int i=0;i<t;++i){
        ld=max(ld,make_pair(good[i],i));
    }
    int x=language(ld.second);
    New(E,x);

   return;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 547 ms 2908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 612 ms 2980 KB Output is partially correct - 77.90%