建议加强数据 :0
查看原帖
建议加强数据 :0
766436
Mr_RedStone楼主2023/7/31 16:39

刷题时遇到了这道题,

写出来一个完全没逻辑的做法,

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000005];
int x[1000005],l[1000005],r[1000005];
long long d[1000005],s[1000005];
int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d %d %d",&x[i],&l[i],&r[i]);
		d[l[i]]+=x[i];
		d[r[i]+1]-=x[i];
	}
	for(int i=1;i<=n;i++){
		s[i]=s[i-1]+d[i];
	}
	for(int i=1;i<=n;i++){
		if(s[i]>a[i]){
			printf("-1\n");
			long long sum=0;
			for(int j=1;j<=m;j++){
				if(i>=l[j]&&i<=r[j]){
					sum+=x[j];
					if(sum>a[i]){
						printf("%d",j);
						break;
					}
				}
			}
			return 0;
		}
	}
	printf("0");
	return 0;
}

虽然可以通过,但是过不了题目给的输入输出样例。

错误原因是这个代码是在m个订单后判断是否能完成,但这会导致像本来是在第三天超的,可最后判断发现第二天就已经超了,造成答案错误。

建议添加一两个像输入输出样例的数据点 :)

2023/7/31 16:39
加载中...