本次基础赛D题
  • 板块学术版
  • 楼主ljcnoi
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/12/31 18:35
  • 上次更新2023/12/31 22:14:06
查看原帖
本次基础赛D题
1176197
ljcnoi楼主2023/12/31 18:35

请问为什么我写的程序(用的是纯递推法)第二点会报WA,哪位大佬能帮我看一下吗,谢谢,有没有用c++写的正解

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int l[200005],x[100005];
	int t,n,m;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		for(int j=0;j<=200000;j++)
		{
			l[j]=0;
		}
		scanf("%d%d",&n,&m);
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&x[j]);
			if(x[j]<=200000)
			{
				l[x[j]]++;
			}
		}
		int kk;
		for(int j=0;j<=200000;j++)
		{
			if(l[j]==0)
			{
				kk=j;
				if(m%2==1)
				{
					for(int k=1;k<=n;k++)
					{
						if(x[k]<kk)
						{
							printf("%d ",x[k]);
						}
						else
						{
							printf("%d ",kk);
						}
					}
					
				}
				else
				{
					for(int k=1;k<=n;k++)
					{
						if(x[k]<kk)
						{
							printf("%d ",x[k]);
						}
						else
						{
							printf("%d ",kk+1);
						}
					}
				}
				break;
			}
			else if(l[j]>=2)
			{
				kk=j;
				if(m>=2)
				{
					if(m%2==1)
					{
						for(int k=1;k<=n;k++)
						{
							if(x[k]<kk)
							{
								printf("%d ",x[k]);
							}
							else
							{
								printf("%d ",kk+1);
							}
						}
					}
					else
					{
						for(int k=1;k<=n;k++)
						{
							if(x[k]<=kk)
							{
								printf("%d ",x[k]);
							}
							else
							{
								printf("%d ",kk);
							}
						}
					}
				}
				else
				{
					int mn;
					for(int xx=1;xx<=200000;xx++)
					{
						if(l[xx]==0)
						{
							mn=xx;
							break;
						}
					}
					for(int k=1;k<=n;k++)
					{
						if(x[k]<kk)
						{
							printf("%d ",x[k]);
						}
						else
						{
							if(x[k]<mn&&l[x[k]]==1)
							{
								printf("%d ",x[k]);
							}
							else
							{
								printf("%d ",mn);
							}
						}
					}
				}
				break;
			}
		}
		cout<<endl;
	}
	return 0;
}
2023/12/31 18:35
加载中...