NC206546. 分发奖金
描述
输入描述
第一行个整数
,表示有
位玩家,
个回合。(
)
接下来行每行有
个整数
如上述题意。(
,
)
输出描述
共个整数,相邻的整数用空格隔开,表示每位玩家最后得到的奖惩情况。
示例1
输入:
5 3 1 2 1 3 5 -10 2 5 6
输出:
1 7 -4 -4 -4
Java(javac 1.8) 解法, 执行用时: 1085ms, 内存消耗: 87664K, 提交时间: 2020-05-24 17:37:25
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = 0, m = 0; long[] res = new long[100001]; while (in.hasNext()) { n = in.nextInt(); m = in.nextInt(); // res = new long[n]; for (int i = 0; i < n; i++) { res[i] = 0; } for (int i = 0; i < m; i++) { int l = in.nextInt(); int r = in.nextInt(); long w = in.nextLong(); for (int j = l; j <= r; j++) { res[j-1] += w; } } for (int i = 0; i < n - 1; i++) { System.out.print(res[i] + " "); } System.out.println(res[n - 1]); } } }
C++14(g++5.4) 解法, 执行用时: 231ms, 内存消耗: 1640K, 提交时间: 2020-05-24 13:19:12
#include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> #include<cstring> #include<cstdlib> using namespace std; long long n,m,l,r,w; long long a[100010]; int main() { cin>>n>>m; memset(a,0,sizeof(a)); for(int i=1;i<=m;i++) { cin>>l>>r>>w; for(int j=l;j<=r;j++) a[j]+=w; } for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 123ms, 内存消耗: 1124K, 提交时间: 2020-05-24 13:18:42
#include<stdio.h> int main (){ long long a[100001]; int n,m,r,l,w,i,j; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { a[i]=0; } for(i=0;i<m;i++) { scanf("%d%d%d",&l,&r,&w); for(j=l;j<=r;j++) { a[j]+=w; } } for(i=1;i<=n;i++) { printf("%lld ",a[i]); } return 0; }