lanqiao OJ 2143 最少刷题数

简介: lanqiao OJ 2143 最少刷题数

1.最少刷题数 - 蓝桥云课 (lanqiao.cn)

升序排序,找到第一个   题数小于他数量  大于等于  题数大于他数量的 ,如果找到的是 < 那我们只需要做到b[j]道  也就是说我们和这个中位数的值一样就行了, 但是如果我们找到的是 == , 那我们就得变了 ,要比这个中位数多一道题,这个可以用二分来找,但是用双指针似乎更简单些

#include<iostream>
#include<algorithm>
#include<cstring>
 
using namespace std ;
const int N = 1e5 +10 ;
int a[N] , b[N] ;
int main(){
  int n ; cin >> n ;
  for(int i = 1 ; i <= n ; i++){
    cin >> a[i] ;
    b[i] =a[i] ;
  }
  sort(b+1,b+n+1) ;//升序排序
  int j = 0 ;
  int ans = -1 ;
  for(int i = 1 ; i <= n && ans==-1;  ){ //找到第一个就停止循环
    j = i ++ ; //j为找到的数 ,让i去找第一个大于bj的数
    while(i <=n && b[j] == b[i]) i ++ ;//找第一个大于bj的数
    int l = j - 1 , r = n - i + 1 ;//判断一下, 左边数量,右边数量
    if(l < r) continue ;//如果左少右多 ,直接继续找
    else if(l > r) ans = b[j] ;//如果左多右少 , 把目标题目量做到b[j]就行了
    else ans = b[j] + 1 ;  //如果相等, 那我们需要做到b[j] + 1
  }
  for(int i = 1 ; i <= n ; i ++){对每一个进行判断
    int need = 0 ;
    if(a[i] < b[j]) need = ans - a[i] ;
    cout << need << " " ;
  }
  cout << endl ;
  return 0 ;
}
目录
相关文章
|
1月前
lanqiao OJ 689 四阶幻方
lanqiao OJ 689 四阶幻方
24 0
|
1月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
14 2
|
1月前
lanqiao OJ 649 算式900
lanqiao OJ 649 算式900
13 1
|
1月前
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
12 1
|
30天前
lanqiao oj 186 糖果(状态压缩dp)
lanqiao oj 186 糖果(状态压缩dp)
12 0
|
1月前
Leetcode第十八题(四数之和)
这篇博客介绍了LeetCode第18题“四数之和”的解法,通过排序和双指针技术来找出数组中所有和为特定值的四个不同元素的组合。
11 0
|
6月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
64 0
|
JavaScript 索引
leetcode_18. 四数之和,n 数之和完结篇
题目链接:18. 四数之和 这个人已经靠 n 数之和水了好几篇文章了,已经不想再水了 我之前写过好几篇的 nSum 相关的文章,在我的个人主页里面搜索可以发现有三篇相关的文章,当然看的人不多,但是还是决定要把这个类型题写完,也就是今天的终章 `nSum`
leetcode_18. 四数之和,n 数之和完结篇
刷 leetcode三个数的最大乘积 | 刷题打卡
刷 leetcode三个数的最大乘积 | 刷题打卡
85 0
|
算法
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
92 0
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加