Pagini recente » Cod sursa (job #266671) | Cod sursa (job #2625145) | Cod sursa (job #3200770) | Cod sursa (job #178728) | Cod sursa (job #2037768)
#include <iostream>
#include <cstdio>
#define MAXNM 3647
#define sh short
using namespace std;
FILE *fin=fopen("elimin.in","r"),*fout=fopen("elimin.out","w");
sh n,m,R,C,mt[MAXNM][MAXNM];
struct help{
int poz,s;
}r[MAXNM],c[MAXNM];
int poz(sh p,sh q,help v[]){
sh st=p,dr=q,x=v[p].s,pt=v[p].poz;
while(st<dr){
while(st<dr and v[dr].s>=x) dr--;
v[st].s=v[dr].s;
v[st].poz=v[dr].poz;
while(st<dr and v[st].s<=x) st++;
v[dr].s=v[st].s;
v[dr].poz=v[st].poz;
}
v[st].s=x;
v[st].poz=pt;
return st;
}
void QS(sh p,sh q,help v[]){
int m=poz(p,q,v);
if(m-1>p) QS(p,m-1,v);
if(m+1<q) QS(m+1,q,v);
}
sh mx(sh a,sh b){
if(a>b) return a;
return b;
}
int main(){
int ts=0;
fscanf(fin,"%hd",&n);
fscanf(fin,"%hd",&m);
fscanf(fin,"%hd%hd",&R,&C);
for(sh i=1;i<=n;i++){
for(sh j=1;j<=m;j++){
fscanf(fin,"%hd",&mt[i][j]);
r[i].s+=mt[i][j];
c[j].s+=mt[i][j];
r[i].poz=i;
c[j].poz=j;
ts+=mt[i][j];
}
}
QS(1,n,r);
QS(1,m,c);
for(sh i=1;i<=mx(R,C);i++){
if(i<=R) ts-=r[i].s;
if(i<=C) ts-=c[i].s;
}
for(sh i=1;i<=R;i++){
for(sh j=1;j<=C;j++){
ts+=mt[r[i].poz][c[j].poz];
cout<<r[i].poz<<' '<<c[j].poz;
}
}
fprintf(fout,"%d",ts);
return 0;
}