第三届全国
大学生算法设计与编程挑战赛
只有:B,D,E,G,I,K,L
正⽂
B:
思路:⼆分
⼆分给出⼀个mid,让第⼀个数 r 为max(a[1]-d,0),以后的数⾄少是 r+1,⽽且太⼩就直接返回NO,也就是 if( a[i]-mid < r+1)
return 0;
因为递增,r最⼩为 r+1。因为差值⼩于mid,r最⼩为 a[i]-mid ,所以 r=max(r+1,a[i]-mid);
总代码:
1 int check(int d){
2 int r=max(0,a[1]-d);
3 fo(2,n){
4 if(a[i]+d
2 #include
3 using namespace std;
4 #define fo(a,b) for(int i=a;i<=b;i++)
5 #define inf 0x3f3f3f3f
6 #define ll long long
7 #define M 10000