社区讨论

15分求调

P14665[KenOI 2025] 序列题参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mivn3qy1
此快照首次捕获于
2025/12/07 19:29
2 个月前
此快照最后确认于
2025/12/10 20:35
2 个月前
查看原帖
大部分测试点对但是有几个会比答案大1 调了一个小时没找到问题 求大佬帮忙看看
CPP
#include<bits/stdc++.h>
using namespace std;

const int N = 10000;
int nums[N];
vector<int> minl;
vector<int> minr;
vector<int> maxl;
vector<int> maxr;

int main(){
	int n, m;
	cin >> n >> m;
	int MIN = N;
	int MAX = 0;
	for(int i=0;i<n;i++){
		cin >> nums[i];
		MIN = min(MIN, nums[i]);
		MAX = max(MAX, nums[i]);
	}
	while(m){
		if(MAX == MIN) break;
		int ll = 0, rr = 0;
		bool st = false;
		for(int i=0;i<n;i++){
			rr = i;
			if(nums[i] == MIN) st = true;
			if(nums[i] == MAX){
				rr = i-1;
				if(st){
					minl.push_back(ll);
					minr.push_back(rr);
					st = false;
				}
				ll = i+1;
				rr = i+1;
			}
		}
		if(ll <= rr && rr < n && st){
			minl.push_back(ll);
			minr.push_back(rr);
		}
		
		ll = 0, rr = 0;
		st = false;
		for(int i=0;i<n;i++){
			rr = i;
			if(nums[i] == MAX) st = true;
			if(nums[i] == MIN){
				rr = i-1;
				if(st){
					maxl.push_back(ll);
					maxr.push_back(rr);
					st = false;
				}
				ll = i+1;
				rr = i+1;
			}
		}
		if(ll <= rr && rr < n && st){
			maxl.push_back(ll);
			maxr.push_back(rr);
		}
		
		if(minl.size() <= maxl.size()){
			while(minl.size()){
				ll = minl.back(), rr = minr.back();
				minl.pop_back(), minr.pop_back();
				for(int i=ll;i<=rr;i++){
					nums[i]++;
				}
				m--;
				if(m == 0) break;
			}
			if(minl.size() == 0) MIN++;
		}else{
			while(maxl.size()){
				ll = maxl.back(), rr = maxr.back();
				maxl.pop_back(), maxr.pop_back();
				for(int i=ll;i<=rr;i++){
					nums[i]--;
				}
				m--;
				if(m == 0) break;
			}
			if(maxl.size() == 0) MAX--;
		}
		
		maxl.clear();
		minl.clear();
		maxr.clear();
		minr.clear();
		
	}
	cout << MAX - MIN;
	
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...