社区讨论

玄关求调

P14217 [ICPC 2024 Kunming I] 两星级竞赛参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhj0xap5
此快照首次捕获于
2025/11/03 18:55
4 个月前
此快照最后确认于
2025/11/03 18:55
4 个月前
查看原帖
注意到 ss 相同的时候的情况了,但还是第二个点就错了
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
    ll x=0,f=1;char c;
    do c=getchar();while(!isdigit(c)&&c!='-');
    if(c=='-') f=-1,c=getchar();
    while(isdigit(c)) x=x*10+c-'0',c=getchar();
    return x*f;
}
const int N = 4e5+10;
struct exam{
    ll s,id,sum,cnt;
    vector<ll> v;
}a[N];
ll n,m,k;
bool cmp1(exam a,exam b){
    return a.s>b.s;
}
bool cmp2(exam a,exam b){
    return a.id<b.id;
}
int main(){
    ll T=read();
    while(T--){
        n=read(),m=read(),k=read();
        for(ll i=1;i<=n;i++){
            exam e;
            e.s=read();e.id=i;e.v.clear();e.sum=0;e.cnt=0;
            a[i]=e;
            for(ll j=1;j<=m;j++){
                ll x=read();
                if(x==-1) a[i].cnt++;
                else a[i].sum+=x;
                a[i].v.push_back(x);
            }
        }
        sort(a+1,a+n+1,cmp1);
        bool f=1;
        ll las;
        a[0].s=a[1].s;
        for(ll i=1;i<=n;i++){
            if(i==1){
                a[i].sum+=k*a[i].cnt;
                for(ll j=0;j<m;j++)
                    if(a[i].v[j]==-1) a[i].v[j]=k;
                las=a[i].sum;
                continue;
            }
            las=min(las,a[i-1].sum);
            if(a[i].sum>=las){
                puts("No");f=0;
                break;
            }
            if(a[i].sum+k*a[i].cnt<las){
                a[i].sum+=k*a[i].cnt;
                for(ll j=0;j<m;j++)
                    if(a[i].v[j]==-1) a[i].v[j]=k;
            }
            else{
                for(ll j=0;j<m;j++){
                    if(a[i].v[j]==-1){
                        if(a[i].sum+k<las)
                            a[i].sum+=k,a[i].v[j]=k;
                        else{
                            ll need=las-1-a[i].sum;
                            a[i].sum+=need;
                            a[i].v[j]=need;
                        }
                    }
                }
            }
        }
        sort(a+1,a+n+1,cmp2);
        if(f){
            puts("Yes");
            for(ll i=1;i<=n;i++){
                for(ll j=0;j<a[i].v.size();j++)
                    printf("%lld ",a[i].v[j]);
                printf("\n");
            }
        }
    }
    return 0;
}
/*
5
3 4 5
5 1 3 -1 -1
2 -1 5 -1 5
3 3 -1 -1 4
2 3 10
10000 5 0 -1
1 10 10 10
2 3 10
10 1 2 3
100 4 5 6
2 3 10
100 1 2 3
10 4 5 6
2 3 10000
100 -1 -1 -1
1 -1 -1 -1
*/

回复

3 条回复,欢迎继续交流。

正在加载回复...