社区讨论

求调站外题

题目总版参与者 2已保存回复 9

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@lo25uogw
此快照首次捕获于
2023/10/23 08:29
2 年前
此快照最后确认于
2023/11/03 08:46
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int T,n,m,a[100007],k[100007],l,t[100007],s[100007],cnt;//k=离散化计数,t=离散化下标,s=对k进行差分 
int main(){
	cin>>T;
	while(T--){
		int pos=1;
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		if(n%m)
		{
			cout<<"false"<<endl;
			continue;
		}
		sort(a+1,a+n+1);
		cnt=1;
		l=1;
		for(int i=1;i<=2*n;i++){
			k[i]=0;
			t[i]=0;
			s[i]=0;
		}
		k[1]++;
		t[1]=a[1];
		for(int i=2;i<=n;i++){
			if(a[i]==a[i-1])
			{
				k[cnt]++;
			}
			else
			{
				k[++cnt]++;
				t[cnt]=a[i];
			}
		}
		for(int i=1;i<=cnt+1;i++){
			s[i]=k[i]-k[i-1];
		}
		int lp=n/m;
		for(int i=1;i<=lp;i++){
			while(l<=cnt&&s[l]==0){
				l++;
			}
			int e=1;
			for(int j=l+1;j<l+m;j++){
				if(t[j]-t[j-1]>1||j>cnt)
				{
					e=0;
					break;
				}
			}
			if(e==0)
			{
				pos=0;
				break;
			}
			s[l]--;
			s[l+m]++;
		}
		if(pos)
		{
			cout<<"true"<<endl;
		}
		else
		{
			cout<<"false"<<endl;
		}
	}
	return 0;
}

回复

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

正在加载回复...