# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
64086 | gs13068 | 저울 (IOI15_scales) | C++17 | 5 ms | 976 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
#include <cstdio>
#include <algorithm>
void init(int T){}
int p[777];
int t[7];
int testMed(int a,int b,int c)
{
int i,j,k,r=0;
for(i=0;i<720;i++)if(p[i])
{
for(j=1;j<=6;j++)t[j]=j;
k=i;
for(j=1;j<=6;j++)
{
std::swap(t[j],t[k%j+1]);
k/=j;
}
if((t[a]<t[b]&&t[b]<t[c])||(t[a]>t[b]&&t[b]>t[c]))r++;
}
return r;
}
void orderCoins()
{
int i,j,k,a,b,c,r=0;
a=getLightest(1,2,3);
b=getNextLightest(4,5,6,a);
for(i=0;i<720;i++)
{
for(j=1;j<=6;j++)t[j]=j;
k=i;
for(j=1;j<=6;j++)
{
std::swap(t[j],t[k%j+1]);
k/=j;
}
p[i]=0;
k=0;
for(j=1;j<=3;j++)if(!k||t[j]<t[k])k=j;
if(k!=a)continue;
k=0;
for(j=4;j<=6;j++)if(t[j]>t[a]&&(!k||t[j]<t[k]))k=j;
if(!k)for(j=4;j<=6;j++)if(!k||t[j]<t[k])k=j;
if(k!=b)continue;
p[i]=1;
r++;
}
for(;r>1;)
{
for(i=1;i<=6;i++)
{
for(j=1;j<i;j++)
{
for(k=1;k<j;k++)if(testMed(i,j,k)<=(r+2)/3&&testMed(j,k,i)<=(r+2)/3&&testMed(k,i,j)<=(r+2)/3)break;
if(k<j)break;
}
if(j<i)break;
}
if(r==80)i=2,j=5,k=6;
b=getMedian(i,j,k);
if(b==i)a=j,c=k;
if(b==j)a=i,c=k;
if(b==k)a=i,c=j;
r=0;
for(i=0;i<720;i++)if(p[i])
{
for(j=1;j<=6;j++)t[j]=j;
k=i;
for(j=1;j<=6;j++)
{
std::swap(t[j],t[k%j+1]);
k/=j;
}
p[i]=0;
if((t[a]<t[b]&&t[b]<t[c])||(t[a]>t[b]&&t[b]>t[c]))
{
p[i]=1;
r++;
}
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |