解题思路:
思维+二分搜索
注意事项:
必须用二分搜索,否则只能得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分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复