#include<bits/stdc++.h>
using namespace std;
#define int long long
const int size=(1<<20)+1;
char buf[size],*p1=buf,*p2=buf;
char buffer[size];
int op1=-1;
const int op2=size-1;
inline char readchar(){
if(p1!=p2) {
return *p1++;
}
return p1==(p2=(p1=buf)+fread(buf,1,size-1,stdin))?EOF:*p1++;
}
inline void flush(){
fwrite(buffer,1,op1+1,stdout),op1=-1;
}
inline void writechar(const char &x) {
if(op1==op2) flush();
buffer[++op1]=x;
}
#ifndef ONLINE_JUDGE
#define readchar getchar
#endif
#define putchar writechar
inline long long read() {
int s=1,c=readchar(),x=0;
while(c<=32) {
c=readchar();
}
if(c=='-') {
s=-1,c=readchar();
}
for(; ('0'<=c && c<='9'); c=readchar()) {
x=x*10+c-'0';
}
return x*s;
}
inline void print(long long x) {
if(x<0) {
writechar('-'),x=-x;
}
char s[25];
int n=0;
while(x||!n) {
s[n++]='0'+x%10,x/=10;
}
while(n--) {
writechar(s[n]);
}
}
const int N=3005;
int t,T,n,i,j,k,o,p,m,x,y,z,tmp,a[N][N],l[N],h[N],as[N*N];
signed main(){
n=read();m=read();k=read();
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]=read();
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
h[i]+=a[i][j];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
l[i]+=a[j][i];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
as[++t]=h[i]+l[j]-a[i][j];
nth_element(as+1,as+1+k,as+t+1);
printf("%d",(as[k]+n+m-2)/(n+m-1));
return 0;
}
代码长这个样子,然后WA#22,原因是溢出int
但改成long long 前面的点就会错,非常难绷...
求助大佬帮忙调一下