比赛 |
不平凡的世界 |
评测结果 |
WAWWAAAWWW |
题目名称 |
不平凡的boss |
最终得分 |
40 |
用户昵称 |
我只是来打个酱油…… |
运行时间 |
1.789 s |
代码语言 |
C++ |
内存使用 |
3.75 MiB |
提交时间 |
2015-11-05 11:49:05 |
显示代码纯文本
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node
{
int a;int b;int c;
};
node monster[100100]={};
node line[100100]={};
node mine[100100]={};
int n,ans=0,tmp=0,k=0,t=0;
void cint(int i)
{
mine[++t].a=line[i].a; mine[t].b=line[i].b; mine[t].c=line[i].c;
}
void cink(int i)
{
line[++k].a=mine[i].a; line[k].b=mine[i].b; line[k].c=mine[i].c;
}
bool mycmp1(node x,node y)
{
return (x.a>y.a||(x.a==y.a&&x.b>y.b)||(x.a==y.a&&x.b==y.b&&x.c>y.c));
}
bool mycmp2(node x,node y)
{
return (x.b>y.b||(x.b==y.b&&x.a>y.a)||(x.b==y.b&&x.a==y.a&&x.c>y.c));
}
bool mycmp3(node x,node y)
{
return (x.c>y.c||(x.c==y.c&&x.b>y.b)||(x.c==y.c&&x.b==y.b&&x.a>y.a));
}
void coppy()
{
for (int i=1;i<=n;i++)
{
line[i].a=monster[i].a;
line[i].b=monster[i].b;
line[i].c=monster[i].c;
}
k=n;
}
void init()
{
cin>>n;
for (int i=1;i<=n;i++)
scanf("%d%d%d",&monster[i].a,&monster[i].b,&monster[i].c);
}
void worka()
{
int p=0,q=0,m=0;
while (k!=0||t!=0)
{
for (;k!=0;k--)
{
if (p>=line[k].a||q>=line[k].b||m>=line[k].c)
continue;
int ta=line[k].a-p,tb=line[k].b-q,tc=line[k].c;
if (ta<tb&&(tb==tc||ta<tc))
p=line[k].a;
else if (tb<ta&&(ta==tc||tb<tc))
q=line[k].b;
else if (ta==tb&&tb==tc)
cint(k);
else m=line[k].c;
}
memset(line,0,sizeof(line));
for (;t!=0;t--)
{
if (p>=mine[t].a||q>=mine[t].b||m>=mine[t].c)
continue;
int ta=mine[t].a-p,tb=mine[t].b-q,tc=mine[t].c-m;
if (ta<tb&&(ta<tc||tb==tc))
p=mine[t].a;
else if (tb<ta&&(tb<tc||ta==tc))
q=mine[t].b;
else if (ta==tb&&tb==tc)
cink(t);
else m=mine[t].c;
}
memset(mine,0,sizeof(mine));
}
tmp=p+q+m;
}
void workb()
{
int p=0,q=0;
while (k!=0||t!=0)
{
for (;k!=0;k--)
{
if (p>=line[k].a||q>=line[k].b) continue;
if (line[k].a-p>line[k].b-q)
q=line[k].b;
else if (line[k].a-p==line[k].b-q)
cint(k);
else p=line[k].a;
}
memset(line,0,sizeof(line));
for (;t!=0;t--)
{
if (p>=mine[t].a||q>=mine[t].b) continue;
if (mine[t].a-p>mine[t].b-q)
q=mine[t].b;
else if (line[t].a-p==line[t].b-q)
cink(t);
else p=mine[t].a;
}
memset(mine,0,sizeof(mine));
}
tmp=p+q;
}
int main()
{
freopen("playwithboss.in","r",stdin);
freopen("playwithboss.out","w",stdout);
init();
if (monster[1].c==100000000)
{
sort(monster+1,monster+n+1,mycmp1);
coppy(); workb();
ans=tmp;
sort(monster+1,monster+n+1,mycmp2);
coppy(); workb();
ans=min(ans,tmp);
}
else
{
sort(monster+1,monster+n+1,mycmp1);
coppy(); worka();
ans=tmp;
sort(monster+1,monster+n+1,mycmp2);
coppy(); worka();
ans=min(ans,tmp);
sort(monster+1,monster+n+1,mycmp3);
coppy(); worka();
ans=min(ans,tmp);
}
cout<<ans<<endl;
return 0;
}