Cod sursa(job #1265022)

Utilizator akaprosAna Kapros akapros Data 16 noiembrie 2014 16:49:17
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,j,p,q,a[7300],s,r,c,sol,m;
struct nod
{
    int x;
    int y;
}sl[7305],sc[7305];
int S[7305];
int cmp(const nod A,const nod B)
{
    return A.x<B.x;
}
int cmp1(const nod A,const nod B)
{
    return A.x-a[n*(A.y-1)+A.y]<B.x-a[n*(B.y-1)+B.y];
}
int cmp2(const nod A,const nod B)
{
    return A.x-a[m*(A.y-1)+A.y]<B.x-a[n*(B.y-1)+B.y];
}
int poz[7305];
int main()
{
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);
    scanf("%d %d %d %d",&n,&m,&r,&c);
    for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
    {
        scanf("%d",&a[++p]);
        sl[i].x+=a[p];
        sc[j].x+=a[p];
        sl[i].y=i;
        sc[j].y=j;
        s+=a[p];
    }
    if ((r==0)&&(c==0)) {printf("%d",s); return 0;}
    sort(sl+1,sl+n+1,cmp); sort(sc+1,sc+m+1,cmp);
    if (r==0)
    {
        for (j=1;j<=c;j++) s=s-sc[j].x;
        printf("%d",s);
        return 0;
    }
    if (c==0)
    {
        for (j=1;j<=r;j++) s=s-sl[j].x;
        printf("%d",s);
        return 0;
    }
    for (i=1;i<=n;i++)
    {
        sort(sc+1,sc+m+1,cmp1); S[i]=sl[i].x;
        for (j=1;j<=c;j++) S[i]+=sc[j].x-a[n*(sc[j].y-1)+sc[j].y];
    }
    sort(S+1,S+n+1); sol=s;
    for (i=1;i<=r;i++) sol=sol-S[i];
    for (j=1;j<=m;j++)
    {
        sort(sl+1,sl+m+1,cmp1); S[j]=sc[j].x;
        for (i=1;i<=r;i++) S[j]+=sl[i].x-a[(sl[j].y-1)*n+sc[j].y];
    }
    sort(S+1,S+m+1);
    for (i=1;i<=r;i++) s=s-S[i];
    printf("%d",max(sol,s));
    return 0;
}