解题思路:

思维+二分搜索
注意事项:

必须用二分搜索,否则只能得90分。。。

参考代码:

import java.util.*;
import java.io.*;

// https://www.dotcpp.com/oj/problem2610.html
public class Main {
	static StreamTokenizer cin;
	static PrintWriter out;
	static int N;
	public static void main(String[] args) throws IOException{
		cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		out = new PrintWriter(new OutputStreamWriter(System.out));
		N = nextInt();
		if(N==1) 
			out.println(1);
		else {
			for(int i = 17; i > 0; i--) {
				int k = (i*2+1)>>1;
				boolean flag = false;
				long left = i<<1;
				long right = N;
				while(left <= right) {
					long j = (left+right)>>1;  // 计算第j行
					long m = C((int)j, k);
					if(m == N) {
						long dis = (long)(1+j)*j/2+k+1;
						out.println(dis);
						flag = true;
						break;
					}else if(m > N)
						right = j-1;
					else {
						left = j+1;
					}
				}
				if(flag)
					break;
				
			}
		}

	out.flush();
	out.close();
	}
	
	static int nextInt() throws IOException{
		cin.nextToken();
		return (int)cin.nval;
	}
	
	static long C(int a, int b) {  // 行列
		long mul = 1;
		long c = b;
		for(int i = a, j=1;j <= b; i--, j++) {
			mul *= i;
			mul /= j;
			if(mul > N)
				return mul;
		}
		return mul;

	}

}


点赞(0)
 

0.0分

7 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论