NC205836. 十字爆破
描述
输入描述
第一行有两个正整数 和 ,代表方格的行数和列数。
接下来的 行,每行有 个数 ,代表每个方格中的整数。
输出描述
输出 行 列整数,分别代表选择每个位置方格的得分情况。
示例1
输入:
2 2 1 2 3 4
输出:
6 7 8 9
C++14(g++5.4) 解法, 执行用时: 432ms, 内存消耗: 29280K, 提交时间: 2020-05-21 19:28:14
#include<bits/stdc++.h> using namespace std; long long int a[1000009],x[1000009],y[1000009]; int n,m; int main() { scanf("%d%d",&n,&m); for(int i=0;i<n*m;i++) { scanf("%lld",&a[i]); x[i/m]=x[i/m]+a[i]; y[i%m]=y[i%m]+a[i]; } for(int i=0;i<n*m;i++) { printf("%lld ",x[i/m]+y[i%m]-a[i]); if(i%m==m-1) cout<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 515ms, 内存消耗: 20684K, 提交时间: 2020-07-23 06:53:03
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e6+10; ll suml[N],sumh[N],mp[N]; int n,m; int main(){ cin>>n>>m; for(int i=0;i<n*m;i++) cin>>mp[i],sumh[i/m]+=mp[i],suml[i%m]+=mp[i]; for(int i=0;i<n*m;i++){ if(!(i%m)&&i) cout<<endl; cout<<sumh[i/m]+suml[i%m]-mp[i]<<' '; } }
Python3(3.9) 解法, 执行用时: 1523ms, 内存消耗: 79260K, 提交时间: 2021-04-08 13:00:16
n,m=map(int,input().split()) s_n=[0]*n s_m=[0]*m ho=[] for i in range(n): a=list(map(int,input().split())) ho.append(a) for j in range(m): s_n[i]+=a[j] s_m[j]+=a[j] for i in range(n): out=[] for j in range(m): out.append(s_n[i]+s_m[j]-ho[i][j]) print(*out)
C++(g++ 7.5.0) 解法, 执行用时: 840ms, 内存消耗: 29856K, 提交时间: 2023-03-06 23:08:31
#include<bits/stdc++.h> using namespace std; const int N=1e7+10; long long a[N],h[N],l[N]; int main(){ int n,m;cin>>n>>m; for(int i=0;i<n*m;i++) { cin>>a[i]; h[i/m]+=a[i]; l[i%m]+=a[i]; } for(int i=0;i<n*m;i++) { cout<<h[i/m]+l[i%m]-a[i]<<' '; if(i%m==m-1)cout<<endl; } return 0; }