得物笔试AK

1、存在长度为x的回文子串

直接暴力即可

2、n栋楼总高度为m,楼高至少为1,相邻楼之间高度差不超过1,求第x栋楼的最大高度。

采用的是二分法,设第x栋楼高为h,则要想达到这个高度的最小的总高度是可以求出的,再去判断它和m的相对大小。

#include <iostream>
using namespace std;

int main(void){
  	int n, m, x;
  	cin >> n >> m >> x;
  	int left = 1, right = m;
  	auto minHeight = [&](int h){
	  	long long minHeights = 0;
	  	if (h <= x){
		  	minHeights += 1LL*(h+1)*h/2 + (x-h);
		}else{
		  	minHeights += 1LL*(h-x+1+h)*x/2;
		}
	  	if (h-1 <= n-x){
		  	minHeights += 1LL*(h-1)*h/2 + (n-x-h+1);
		}else{
		  	minHeights += 1LL*(2*h-n+x-1)*(n-x)/2;
		}
	  return minHeights;
	}
  	while (left <= right){
	  	int mid = (left + right)/2;
	  	int minHeights = minHeight(mid);
	  	if (minHeights == m){
		  	cout << mid << endl;
		  	return 0;
		}else if (minHeights < m){
		  	left = mid + 1;
		}else{
		  	right = mid - 1;
		}
	}
  	cout << right << endl;
  	return 0;
}

全部评论
同思路
点赞 回复 分享
发布于 2023-08-29 21:16 北京
请问老哥得物约面了吗
点赞 回复 分享
发布于 2023-09-01 18:13 江苏

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
3 8 评论
分享
牛客网
牛客企业服务