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