为什么单调递增的部分分没拿到
查看原帖
为什么单调递增的部分分没拿到
459188
zrt090604楼主2023/7/23 13:57

单调递增的部分我已经加了特判,但是为什么这部分的分也没拿到……
求助一组hack数据,谢谢

#include<cstdio>
#include<ctime>
#include<cstdlib>
#define max(a, b) a>=b ? a : b
#define min(a, b) a<=b ? a : b
int n, m, a[105], mn = 1e9, cnt;
clock_t st;
void dfs(int p, int now, int b, int s) {
	if((double)(clock()-st) / CLOCKS_PER_SEC >= 0.950) {
		printf("%d", mn); exit(0);
	}
	if(p == m) {
		mn = b-s;
		return;
	}
	if(b-s >= mn) return;
	for(int i = now+2;i <= n-(m-p)*2+2;++i)
		if(max(b, a[i])-min(s, a[i]) < mn) dfs(p+1, i, max(b, a[i]), min(s, a[i]));
}
int main () {
	st = clock();
	scanf("%d%d", &n, &m);
	for(int i = 1;i <= n;++i) {
		scanf("%d", a+i);
		if(a[i] > a[i-1]) ++cnt;
	}
	if(cnt==n) {
		for(int i = 1;i+m*2-2 <= n;++i)
			mn = min(mn, a[i+m*2-2]-a[i]);
		printf("%d", mn);
		return 0;
	}
	for(int i = 1;i <= n-2*m+2;++i) dfs(1, i, a[i], a[i]);
	printf("%d", mn);
	return 0;
}
2023/7/23 13:57
加载中...