80求hack
查看原帖
80求hack
238310
guosoun楼主2022/4/16 21:56

Subtask 3只过了中间

#include <bits/stdc++.h>
using namespace std;
int n,a[100100];
int main(){
	int t;
	cin>>t;
	while (t--) {
		cin>>n;
		int ls=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		};
		a[n+1]=1e5;
		for(int i=1;i<=n;i++){
			if(a[i]==-1){
				int l=i,r=i;
				while (a[r]==-1) {
					r++;
				}
				int sum=a[r]-a[l-1];
				for(;i<r;i++){
					if(sum>1000) a[i]=a[i-1]+1000,sum-=1000;
					else a[i]=a[i-1]+1;
				}
			}
		}
		for(int i=1;i<=n;i++){
			cout<<a[i]-a[i-1]<<' ';
		}
		cout<<endl;
	}
}

大体思路: 判断-1块的两边之差,在这个差不小于1000之前全填1000,剩下的填1

2022/4/16 21:56
加载中...