Help!! 等差数列 (XJOI - 题目ID:8522) WA 10

#include<bits/stdc++.h>
using namespace std;
int n,m,a[200005],pos,len,p,d,diff[200005];
int main(){
cin>>n>>m;
for(int i=0;i<=n;i++){
a[i]=0;
diff[i]=0;
}
for(int i=1;i<=m;i++){
cin>>pos>>len>>p>>d;
int r=pos+len-1;
diff[pos]+=p;
diff[pos+1]+=d;
diff[r+1]-=(p+(r-pos)*d);
}
for(int i=1;i<=n;i++){
a[i]=a[i-1]+diff[i];
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}

2 个赞
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200005],pos,len,p,d,diff[200005],b[200005];
int main(){
	cin>>n>>m;
	for(int i=0;i<=n;i++){
		a[i]=0;
		diff[i]=0;
	}
	for(int i=1;i<=m;i++){
		cin>>pos>>len>>p>>d;
		int r=pos+len-1;
		diff[pos]+=p;
		diff[pos+1]+=d;
		diff[r+1]-=(p+(r-pos)*d);
	}
	for(int i=1;i<=n;i++){
		a[i]=a[i-1]+diff[i];
	}
	for(int i=1;i<=n;i++){
		b[i]=b[i-1]+a[i];
		cout<<b[i]<<" ";
	}
	return 0;
}

你试试

3 个赞

感激不尽

3 个赞

解决方案

2 个赞