搜狗笔试nlogn为什么超时啊?

大佬们帮忙看看 二分法查找对角线最近的一个点,为什么超时
int main(){
	int N;
	while (cin >> N){
		vector<double> angle;
		double temp;
		for (int i = 0; i<N; i++){
			cin >> temp;
			angle.push_back(temp);
		}
		if (N == 0 || N == 1)
			cout << 0.00000000 << endl;
		else{
			double maxlen = 0, len = 0;
			int index = 0;
			if (angle[N - 1] - angle[0] <= 180.0)
				cout << setprecision(8) << angle[N - 1] - angle[0] << endl;
			else{
				for (int i = 0; i<N && angle[i] < 180; i++){
					double midangle = angle[i] + 180.0;
					int index = 0;
					int low = 0, high = N - 1, mid = 0;
					while (low <= high){
						mid = (low + high) / 2;
						if (angle[mid] == midangle){
							index = mid;
							break;
						}
						else if (angle[mid] < midangle)
							low = mid + 1;
						else
							high = mid - 1;
					}
					index = mid;
					len = (angle[index] - angle[i]) < 180 ? angle[index] - angle[i] : 360 - (angle[index] - angle[i]);
					maxlen = max(maxlen, len);
				}
				cout << setprecision(8) << maxlen << endl;
			}
		}

	}
	return 0;
}

#搜狗#
全部评论
cin >>  慢超时
点赞 回复 分享
发布于 2017-09-08 18:13
90%,据说java改成bufferedreader就好了,尴尬
点赞 回复 分享
发布于 2017-09-08 18:16
很多原因都会影响的,vector可以先分配n,避免扩容,scanf比cin快是必然的,虽然这可能不是最重要的影响因素,但是可以快一点就快一点呗
点赞 回复 分享
发布于 2017-09-08 18:41

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务