QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#586857 | #8940. Piggy Sort | zhouhuanyi | RE | 0ms | 0kb | C++17 | 1.5kb | 2024-09-24 16:07:08 | 2024-09-24 16:07:09 |
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 500
using namespace std;
const double inf=(double)(1e9);
int read()
{
char c=0;
int sum=0,f=1;
while (c!='-'&&(c<'0'||c>'9')) c=getchar();
if (c=='-') c=getchar(),f=-1;
while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
return sum*f;
}
int T,n,m,X[N+1][N+1],p[N+1],num[N+1];
long long t[N+1];
int main()
{
long long b,d,ds;
int ps,a;
T=read();
while (T--)
{
n=read(),m=read();
for (int i=1;i<=n;++i) num[i]=i;
for (int i=1;i<=m;++i)
for (int j=1;j<=n;++j)
X[i][j]=read();
for (int i=2;i<=m;++i)
{
t[i]=0;
for (int j=1;j<=n;++j) t[i]+=X[i][j]-X[1][j];
}
for (int i=1;i<=n;++i)
{
a=-1,b=1,d=0;
for (int j=2;j<=m;++j)
for (int k=1;k<=n-i+1;++k)
{
ds=X[j][k]-((__int128)(X[j][k]-X[j-1][k])*t[j])/(t[j]-t[j-1]);
if ((__int128)(X[j][k]-X[j-1][k])*b>(__int128)(a)*(t[j]-t[j-1])||((__int128)(X[j][k]-X[j-1][k])*b==(__int128)(a)*(t[j]-t[j-1])&&ds>d)) a=X[j][k]-X[j-1][k],b=t[j]-t[j-1],d=ds;
}
for (int j=1;j<=n;++j)
if (X[1][j]==d)
{
p[num[j]]=n-i+1;
break;
}
for (int j=1;j<=m;++j)
{
ps=0;
for (int k=1;k<=n-i+1;++k)
if (X[j][k]==floor(d+((__int128)(t[j])*a)/b+0.5))
ps=k;
for (int k=ps;k<=n-i;++k) X[j][k]=X[j][k+1];
if (j==1)
{
for (int k=ps;k<=n-i;++k) num[k]=num[k+1];
}
}
}
for (int i=1;i<=n;++i) printf("%d ",p[i]);
puts("");
}
return 0;
}
详细
Test #1:
score: 0
Runtime Error
input:
3 2 4 1 2 3 4 5 6 7 8 1 2 1 1 3 4 1 2 3 6 9 9 10 15 17 12 18 21