依旧是自闭的打卡时间,才练了短短不到一个月的时间,还有好多的知识点不会,起步本来就比人家慢了,等比赛完把,打完比赛慢慢学,dp,前缀和拆分,滑动窗口,难一点的搜索。现在只会一点简单的板子题和基础的字符串,简单数论等,而且这些题目还不能保证全对,篮球杯,过点样例就行了,想进学校的acm,5-6月份应该有一次学校的比赛,选拔并培训参加湖南省程序设计竞赛和之后的icpc等比赛,先把篮球杯打完吧,打完再学其他知识,争取进校赛,暑期培训打icpc。
1.路标设置
package erfentx;
import java.util.*;
import java.io.*;
/*路标设置11
*一条公路,n个起始路标,新增m个路标,使得“空旷指数”最小
* 二分查找答案的模板题
*
*
*/
public class lubiao {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
static int N =(int)1e5 + 10,l,n,k;
static int[] a= new int [N];
static int left =0,right = Integer.MAX_VALUE;
//使得相邻两个路标之间的距离>=mid情况下,在添加k个路标
//符合上述情况,r=mid,距离还可以更小,否则l= mid+1;
//知道左右两边界是相等的,此时的left即为满足要求的最小距离
private static boolean check(int x) {
int cnt =k,pre =0;
for(int i=1;i<=n;i++) {
if(cnt<0) {//无法再设置路标
return false;
}
//两个相邻的路标距离<x,不再需要设置路标
if(a[i] -pre<=x) {
pre = a[i];//保留最小距离的下标
continue;
}
//当前路标-pre路标的小于mid值
pre +=x;//mid
i--;
cnt--;//设置了一个路标
}
return cnt>=0;
}
public static void main(String[] args) throws IOException {
String [] lnk = in.readLine().split(" ");
l = Integer.parseInt(lnk[0]);
n = Integer.parseInt(lnk[1]);
k = Integer.parseInt(lnk[2]);
String s[] = in.readLine().split(" ");
for(int i=1;i<=n;i++) {
a[i] = Integer.parseInt(s[i - 1]);
right = Math.max(right, a[i] - a[i-1]);
}
//二分模板
while(left < right) {
int mid = left + ((right - left) >> 1);
if(check(mid)) {
right = mid;
}else {
left = mid+1;
}
}
out.print(left);
out.flush();
in.close();
}
}
2,,3,4你们来写