这题硬贪过不了吗
查看原帖
这题硬贪过不了吗
614984
NNNNzh楼主2023/3/29 21:36

每次取最长的距离的中点给他插上路标。 知道路标用完。```cpp

#include<bits/stdc++.h>
using namespace std;
int l,n,k;
int dis[100100000];
int vis[100100005];
int main()
{
	cin>>l>>n>>k;
	for(int i=0;i<n;i++)
	{
	int pos;
	cin>>pos;
		vis[pos]=1;
	}
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	vis[0]=1;
	vis[l]=1;
	for(int i=0;i<=l;i++)
	{
		if(vis[i]==1)
		for(int j=i+1;j<=l;j++)
		{
			if(vis[j]==1)
			{
				dis[i]=j-i;
				break;
			}
		}
	}
		
	while(k--)
	{
		int maxx=-1;
		int flag=0;
		for(int i=0;i<=l;i++)
		{
			if(maxx<dis[i])
			{
			maxx=max(maxx,dis[i]);
			flag=i;
			}
		}
		int mid=(dis[flag]+1)/2;
		dis[flag]=mid;
		int x=mid+flag;
		dis[x]=dis[flag]-mid;
	}
	int maxx=-1;

	for(int i=0;i<=l;i++)
	{
		if(dis[i]!=0)
		maxx=max(dis[i],maxx);
	}
	cout<<maxx;
	
 } 
2023/3/29 21:36
加载中...