题解 | #牛客练习赛115 (AB)#

Antiamuny wants to leaern binary search again

https://ac.nowcoder.com/acm/contest/64819/B

知乎版本

竞赛地址

Mountain sequence

固定最大的。

从大到小枚举元素。

对于当前元素,假设有num个,对于每一个,我们可以放左边,也可以放右边。

总共有(0,num),(1,num-1)...,(num-1,1),(num,0)这num+1种组合。

void solve() {
	scanf("%d", &n);
	map<int, int> mp;
	int mx = -1;
	for (int i = 0; i < n; ++i) {
		scanf("%d", &a[i]);
		++mp[a[i]];
		mx = max(mx, a[i]);
	}
	sort(a, a + n);
	int j = 0;
	for (int i = 0; i < n; ++i) {
		if (!i || a[i] != a[i-1]) {
			a[j++] = a[i];
		}
	}
	ll res = 1;
	for (auto p: mp) {
		if (p.first == mx) {
			continue;
		}
		res = M(res, p.second + 1);
	}
	printf("%lld\n", res); 
} 

Antiamuny wants to leaern binary search again

模拟下,每次优先取最大的部分(为了尽可能让下一轮的[l,r]区间长度大)。因为是除以2是向下取整,优先取右边部分。

#define debugging 0
void solve() {
	int l, r, cnt;
	scanf("%d%d%d", &l, &r, &cnt);
	int mid = -1;
	while (cnt > 0 && (l <= r)) {
		mid = (l + r) / 2;
		if (debugging)
			printf("cnt: %d (%d, %d):%d\n", cnt, l, r, mid);
		l = mid + 1;
		--cnt;
	}
	if (debugging) printf("cnt: %d\n", cnt);
	printf("%d\n", (cnt > 0 ? -1 : mid));
} 
全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
06-07 12:20
新余学院 Java
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务