这是代码:
#include <cstdio>
#include <numeric>
#include <cmath>
#include <algorithm>
long long n, m, a[1005][1005], b[1005][1005], c, ans[1000005], s;
double f[1005];
int main() {
scanf("%lld%lld", &m, &n);
for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) scanf("%lld", a[i]+j);
for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) scanf("%lld", b[i]+j);
for(int i = 1; i <= n; i++) {
s = std::accumulate(a[i]+1, a[i]+m+1, 0ll);
for(int j = 1; j <= m; j++) f[i] += llabs(a[i][j] - s);
s = std::accumulate(b[i]+1, b[i]+m+1, 0ll);
for(int j = 1; j <= m; j++) f[i] += llabs(b[i][j] - s);
}
for(int i = 1; i <= n; i++)
for(int j = 1; j < n; j++)
if(f[j] > f[j+1]) std::swap(f[j], f[j+1]), ans[c++] = j;
printf("%lld\n", c);
for(int i = 0; i < c; i++) printf("%lld %lld\n", ans[i], ans[i]+1ll);
return 0;
}
我使用的计算每行不整齐度的公式:
i=1∑m(∣ai,j−ai∣+∣bi,j−bi∣)可以证明这不改变大小关系。
我也仔细地进行了检查,但没有发现任何问题。
我猜差错出于 double
的数据精度和范围,但我没有找出问题。
请问我的问题在哪?