QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#580713#8940. Piggy SortForever_Young#WA 0ms3848kbC++141.8kb2024-09-21 23:17:442024-09-21 23:17:45

Judging History

你现在查看的是最新测评结果

  • [2024-09-21 23:17:45]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3848kb
  • [2024-09-21 23:17:44]
  • 提交

answer

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mp make_pair
using namespace std;
const int inf=10000000;
int t,n,m,a[550][550],v[550],r[550];
LL sum[550];
map<int,int> b[550];
pair<int,int> c[550];
int match(int x,int y,int z,int dep){
    if (dep==m) return 1;
    if (1ll*(a[1][y]-a[0][x])*(sum[dep]-sum[0])%(sum[1]-sum[0])!=0) return 0;
    LL tmp=1ll*(a[1][y]-a[0][x])*(sum[dep]-sum[0])/(sum[1]-sum[0])+a[0][x];
    if (tmp<-inf||tmp>inf) return 0;
    //printf("%d %d %d %d %lld\n",x,y,z,dep,tmp);
    if (b[dep][int(tmp)]>=z){
        b[dep][int(tmp)]-=z;
        if (!match(x,y,z,dep+1)){
            b[dep][int(tmp)]+=z;
            return 0;
        }
        return 1;
    }
    return 0;
}
int dfs(int x){
    if (x==n) return 1;
    for (int j=0;j<n;j++){
        if (match(x,j,1,1)){
            v[x]=j;
            if (dfs(x+1)) return 1;
            match(x,j,-1,1);
        }
    }
    return 0;
}
int main(){
    scanf("%d",&t);
    while (t--){
        scanf("%d%d",&n,&m);
        for (int i=0;i<m;i++){
            sum[i]=0;
            b[i].clear();
            for (int j=0;j<n;j++){
                scanf("%d",&a[i][j]);
                sum[i]+=a[i][j];
                b[i][a[i][j]]+=1;
            }
        }
        if (sum[1]==sum[0]){
            for (int i=0;i<n;i++) printf("%d ",i+1);
        }
        else{
            dfs(0);
            for (int i=0;i<n;i++){
                //printf("%d %d\n",i,v[i]);
                c[i]=mp(a[1][v[i]]-a[0][i],i);
            }
            sort(c,c+n);
            for (int i=0;i<n;i++) r[c[i].se]=i;
            for (int i=0;i<n;i++) printf("%d ",r[i]+1);
            printf("\n");
        }
        for (int i=0;i<m;i++)
            for (int j=0;j<n;j++)
                b[i][a[i][j]]=0;
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3848kb

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

output:

1 2 
1 3 1 2 

result:

wrong answer 2nd lines differ - expected: '1', found: '1 3 1 2 '