测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

PROBLEM SET

题库

按难度与知识点筛选,找到适合的练习题。

共 67434 题
重置

题目列表

共 67434 题
A20853 找数 C-L5 -- 困难 -- A20854 有限不循环小数 C-L5 -- 困难 -- A20855 任何递归程序都可以改写为等价的非递归程序,但改写后的非递归程序一定需要显式地使用栈来模拟递归调用过程。( ) C-L5 -- 困难 -- A20856 线性筛相比埃氏筛的核心改进在于:埃氏筛中一个合数可能被多个质数重复标记,线性筛通过"每个合数只被其最大质因子筛去"的策略,保证每个合数恰好被标记一次,从而实现O(n)的时间复杂度。( ) C-L5 -- 困难 -- A20857 若一个问题满足最优子结构性质,则一定可以用贪心算法得到最优解。( ) C-L5 -- 困难 -- A20858 假设数组a的值域范围是D,以下程序的时间复杂度是O(n log n+n log D)。( )bool check(int n, int a[], int k, int dist) { int cnt = 1; int last = a[0]; for (int i = 1; i < n; i++) { if (a[i] - last >= dist) { cnt++; last = a[i]; … C-L5 -- 困难 -- A20859 根据唯一分解定理,如果大于1的整数不能被任何不超其平方根的质数整除,那么n 必定是质数。( ) C-L5 -- 困难 -- A20860 在一个数组中,如果两个元素 a[i]和a[j]满足i<j且 a[i]>a[j],则a[i]和 a[j]是一个逆序对。下面代码可以正确统计数组a区间[l,r]内的逆序对总数。( )long long cnt=0; void merge_count(vector<int>& a, int l, int m, int r){ int i = l, j = m + 1; while(i <= m && … C-L5 -- 困难 -- A20861 若某算法满足递推式:T(n)=2T(n/2)+O(n),则其时间复杂度为O(nlogn)。( ) C-L5 -- 困难 -- A20862 快速排序只要每次都选取中间元素作为枢轴,就一定是稳定排序。( ) C-L5 -- 困难 -- A20863 若数组 a 已按升序排列,则下面代码可以正确实现“在a 中查找第一个大于等于x 的元素的位置”。( )int lowerBound(vector<int>& a,int x){ int l=0, r=a.size(); while(l < r) { int mid = (l + r) / 2; if( a[mid] >= x) r = mid; else l = mid + 1; } retur… C-L5 -- 困难 -- A20864 有一个存储了n个整数的线性表,分别用数组和单链表两种方式实现。在已知下标(或结点指针)的前提下,数组的随机访问是O(1),而在链表中已知某结点的指针时,在该结点之后插入一个新结点的操作也是O(1)。( ) C-L5 -- 困难 -- A20865 下面代码实现两个整数除法,其中被除数为一个“大整数”,用字符串表示,除数是一个小整数,用 int 表示,则横线处应该填写( )。int main(){ string s; int b; cin >> s >> b; vector<int> a; for(char c : s){ a.push_back(c - '0'); } vector<int> c; long long rem = 0; f… C-L5 -- 困难 -- A20866 下面关于排序算法的描述中,不正确的是( )。 C-L5 -- 困难 -- A20867 有n位同学的成绩已经从小到大排好序,现在对它执行下面这段以第一个元素为 pivot的快速排序,请问此次排序的时间复杂度是( )。void quicksort(vector<int>& a, int l, int r) { if (l >= r) return; int pivot = a[l]; int i = l, j = r; while (i < j) { while (i < j && … C-L5 -- 困难 -- A20868 游戏大赛决赛,两组选手分别按得分从小到大排好队,现在要把他们合并成一个有序排行榜。A组: A = {12, 35, 67, 89} ,B组: B = {20, 45, 55, 78} ,下面是归并合并函数的核⼼循环,横线处应填入( )。int i = 0, j = 0; vector<int> result; while (i < A.size() && j < B.size()) { if (… C-L5 -- 困难 -- A20869 下面代码用分治求“最大连续子段和”,其时间复杂度为( )。int solve(vector<int>& a, int l, int r){ if(l == r) return a[l]; int mid = l + (r - l) / 2; int left = solve(a, l, mid); int right = solve(a, mid + 1, r); int sum = 0, lm… C-L5 -- 困难 -- A20870 给定n根木头,第i根长度为a[i]。要切成不少于m段等长木段,求最大可能长度,则横线上应填写( )。const int MAXN = 100005; long long a[MAXN]; int n, m; bool check(long long x){ long long cnt = 0; for(int i = 1; i <= n; i++){ if(x == 0) return true… C-L5 -- 困难 -- A20872 在升序数组中查找第一个大于等于 x 的位置,下面循环中横线应填( )。int lowerBound(const vector<int>& a, int x){ int l=0, r=a.size(); while(l<r){ int mid = l + (r - l)/2; if(a[mid] >= x) ________________; else l = mid + 1; } return … C-L5 -- 困难 -- A20873 下面程序的运行结果为( )。bool check(int n, int a[], int k, int dist) { int cnt = 1; int last = a[0]; for (int i = 1; i < n; i++) { if (a[i] - last >= dist) { cnt++; last = a[i]; } } return cnt >= k; } int solve… C-L5 -- 困难 --