#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; }