# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
584841 | krit3379 | 저울 (IOI15_scales) | C++17 | 143 ms | 520 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "scales.h"
using namespace std;
#define N 100005
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
struct A{
int id,i,j,k,l;
}upd;
vector<A> vec;
vector<vector<int>> per;
vector<int> v;
void init(int t){
v={0,1,2,3,4,5};
do{
per.push_back(v);
}while(next_permutation(v.begin(),v.end()));
}
void orderCoins(){
int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
int ans[6];
vector<vector<int>> now=per,temp;
while(now.size()>1){
ma=2e9;
//case 1
for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
c1=c2=c3=0;
for(auto arr:now){
a=arr[i],b=arr[j],c=arr[k];
m=max({a,b,c});
if(m==a)c1++;
else if(m==b)c2++;
else c3++;
}
if(max({c1,c2,c3})<ma)ma=max({c1,c2,c3}),vec={{1,i,j,k}};
else if(max({c1,c2,c3})==ma)vec.push_back({1,i,j,k});
}
//case 2
for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
c1=c2=c3=0;
for(auto arr:now){
a=arr[i],b=arr[j],c=arr[k];
m=min({a,b,c});
if(m==a)c1++;
else if(m==b)c2++;
else c3++;
}
if(max({c1,c2,c3})<ma)ma=max({c1,c2,c3}),vec={{2,i,j,k}};
else if(max({c1,c2,c3})==ma)vec.push_back({2,i,j,k});
}
//case 3
for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
c1=c2=c3=0;
for(auto arr:now){
a=arr[i],b=arr[j],c=arr[k];
m1=min({a,b,c});
m2=max({a,b,c});
if(a!=m1&&a!=m2)c1++;
else if(b!=m1&&b!=m2)c2++;
else c3++;
}
if(max({c1,c2,c3})<ma)ma=max({c1,c2,c3}),vec={{3,i,j,k}};
else if(max({c1,c2,c3})==ma)vec.push_back({3,i,j,k});
}
//case 4
for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++)for(l=0;l<6;l++){
if(l==i||l==j||l==k)continue;
c1=c2=c3=0;
for(auto arr:now){
a=arr[i],b=arr[j],c=arr[k],d=arr[l];
vector<int> t={a,b,c};
sort(t.begin(),t.end());
if(arr[l]>t[2]||arr[l]<t[0]){
if(a==t[0])c1++;
else if(b==t[0])c2++;
else c3++;
}
else if(arr[l]<t[1]){
if(a==t[1])c1++;
else if(b==t[1])c2++;
else c3++;
}
else{
if(a==t[2])c1++;
else if(b==t[2])c2++;
else c3++;
}
}
if(max({c1,c2,c3})<ma)ma=max({c1,c2,c3}),vec={{4,i,j,k,l}};
else if(max({c1,c2,c3})==ma)vec.push_back({4,i,j,k,l});
}
upd=vec[rand()%vec.size()];
auto [op,i,j,k,l]=upd;
if(op==1){
x=getHeaviest(i+1,j+1,k+1);
x--;
for(auto arr:now)if(arr[x]==max({arr[i],arr[j],arr[k]}))temp.push_back(arr);
}
else if(op==2){
x=getLightest(i+1,j+1,k+1);
x--;
for(auto arr:now)if(arr[x]==min({arr[i],arr[j],arr[k]}))temp.push_back(arr);
}
else if(op==3){
x=getMedian(i+1,j+1,k+1);
x--;
for(auto arr:now)if(arr[x]!=max({arr[i],arr[j],arr[k]})&&arr[x]!=min({arr[i],arr[j],arr[k]}))temp.push_back(arr);
}
else{
x=getNextLightest(i+1,j+1,k+1,l+1);
x--;
int sz=0;
for(auto arr:now){
int t=1e9;
if(arr[i]>arr[l])t=min(t,arr[i]);
if(arr[j]>arr[l])t=min(t,arr[j]);
if(arr[k]>arr[l])t=min(t,arr[k]);
if((max({arr[i],arr[j],arr[k]})<arr[l]&&arr[x]==min({arr[i],arr[j],arr[k]}))||arr[x]==t)temp.push_back(arr);
}
}
now=temp;
temp.clear();
vec.clear();
}
for(i=0;i<6;i++)ans[now[0][i]]=i+1;
answer(ans);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |