奶牛

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int mu[110];     //mu[i]表示第i个木桩的位置 
int dis[11000];  //使用dis保存任意木桩之间的可能的距离 
int num;  //记录保存在数组dis中的元素的个数 
int n,k,p;  //k是木桩的数量

int numOfOx(int d)  //当牛与牛之间最短的距离为d时候,可以放牛的个数为num 
{
	int sum=0;  //记录当前木桩和上一个牛的距离 
	int num=1;
	for(int i=2;i<=k;i++)
	{
		sum+=mu[i]-mu[i-1];
		if(sum>=d)
		{
			num++;
			sum=0;
		}
	}
	return num;
}
int main(void)
{
	
	cin >> n >> k >> p;
	mu[1]=p;
	for(int i=2;i<=k;i++) 
	{
		p = p + ((p*2357+137) % 10) + 1;
		mu[i] = p;
	}
	
	for(int i=1;i<=k;i++)
	{
		for(int j=i+1;j<=k;j++)
		{
			dis[++num]=mu[j]-mu[i]; //使用dis记录两个木桩之间的距离,用dis保存可能的情况。 
		} 
	} 
	
	sort(dis+1,dis+num+1);  //对距离从小到大进行排序 
	
	for(int i=1;i<num;i++)
	{
		//明确一个信息:  奶牛之间距离规定越长,可以放的奶牛的个数越少 
		//如果距离为dis[i]时候可以放n奶牛,距离为dis[i+1]时放的奶牛个数小于n,那么说明最大距离为dis[i] 
		int num1 = numOfOx(dis[i]);
		int num2 = numOfOx(dis[i+1]);
		if(num1>=n && num2<n)  
		{
			cout << dis[i] << endl;
			break;
		}
	}
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/zuimeiyujianni/p/9238668.html