社区讨论

怎么感觉这个做法假了

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mivqxir9
此快照首次捕获于
2025/12/07 21:16
2 个月前
此快照最后确认于
2025/12/10 21:45
2 个月前
查看原帖
CPP
#include<iostream>
using namespace std;

int a[5010];

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>a[i];
	while(m>=0){
		int cnt1=0,cnt2=0,mi=1e9,ma=0,fl=0,lstma,lstmi;
		for(int i=0;i<n;i++)mi=min(mi,a[i]),ma=max(ma,a[i]);
		if(mi==ma)cout<<0,exit(0);
		for(int i=0;i<n;i++){
			if(a[i]==mi)lstmi=i;
			if(!fl&&a[i]==mi)cnt1++,fl=1;
			if(a[i]==ma)fl=0;
		}
		fl=0;
		for(int i=0;i<n;i++){
			if(a[i]==ma)lstma=i;
			if(!fl&&a[i]==ma)cnt2++,fl=1;
			if(a[i]==mi)fl=0;
		}
		fl=0;
		int cnt=min(cnt1,cnt2);
		if(cnt>m)cout<<ma-mi<<"\n",exit(0);
		m-=cnt;
		if(cnt==cnt1){
			fl=0;
			for(int i=0;i<n;i++){
				if(!fl&&a[i]==mi)cnt1++,fl=1;
				if(a[i]==ma)fl=0;
				if(fl&&i<=lstmi)a[i]++;
			}
		}else{
			fl=0;
			for(int i=0;i<n;i++){
				if(!fl&&a[i]==ma)cnt1++,fl=1;
				if(a[i]==mi)fl=0;
				if(fl&&i<=lstma)a[i]--;
			}
		}
		// for(int i=0;i<n;i++)cout<<a[i]<<" ";
		// cout<<m<<"\n";
		// getchar();
	}
}

回复

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

正在加载回复...