#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <unordered_set>
#include <bitset>
#include <chrono>
#define jizz ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pb push_back
#define ET cout << "\n"
#define F first
#define S second
#define MP make_pair
#define ALL(v) v.begin(),v.end()
#define MEM(i,j) memset(i,j,sizeof i)
#define DB(a,s,e) {for(int i=s;i<e;++i) cout << a[i] << " ";ET;}
using namespace std;
typedef long long ll;
#include "grader.h"
#include "lang.h"
const int SZ=100;
const ll P=65537,MOD=1e9+7;
vector<int> ap;
unordered_set<ll> having[56];
bitset<56> vis;
int query(int x)
{
int rt=language(x);
return rt;
}
int cal(int x,int *E)
{
int rt=0;
for(int i=0;i<SZ;++i)
rt+=(having[x].find(E[i])!=having[x].end());
for(int i=0;i+1<SZ;++i)
rt+=(having[x].find((ll)E[i]+(ll)E[i+1]*P)!=having[x].end());
for(int i=0;i+2<SZ;++i)
rt+=(having[x].find((ll)E[i]+(ll)E[i+1]*P+(ll)E[i+2]*P*P)!=having[x].end());
return rt;
}
void excerpt(int *E)
{
srand(chrono::system_clock::now().time_since_epoch().count());
int t;
if(ap.empty()) t=query(0);
else
{
int mx=-1;
for(int i:ap)
{
int tmp=cal(i,E);
if(tmp>mx) mx=tmp,t=i;
}
t=query(t);
}
if(!vis[t]) vis[t]=1,ap.pb(t);
for(int i=0;i<SZ;++i)
having[t].insert(E[i]);
for(int i=0;i+1<SZ;++i)
having[t].insert((ll)E[i]+(ll)E[i+1]*P);
for(int i=0,r;i<20;++i)
r=rand()%(SZ-2),having[t].insert((ll)E[r]+(ll)E[r+1]*P+(ll)E[r+2]*P*P);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7980 ms |
9624 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Partially correct |
8706 ms |
9732 KB |
Output is partially correct - 87.51% |