ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20220906总结

2022-09-07 08:31:18  阅读:202  来源: 互联网

标签:总结 node return int 个数 20220906 mid 二分


20220906三道模拟题

第一道没有什么技术含量,也没有什么算法,只要注意不出一些小失误就可以了。

第二题看到数据范围之后开始犯难,感觉想到的几种写法都无法拿到满分,其中有想到二分的正解思路,但因为没想明白如何打开区间所以最终沉没了。

正解就是二分第k个数的值,看小于它的数的个数是否小于k-1(此时这个数有可能是第k个数,因为相同的数可能有很多个),然后继续二分。(其实这个思路还是很好想的)

第三题花了很长时间理解题意。首先就是要缩点,缩点后就变成了一个有向无环图,那么答案就是在这个修改过的图上找最长链(拓扑排序更新最长链长度和个数)。

三道题写完感觉其实难度还好,只是模拟时自己还是比较急,也不是比较稳,代码水平也不是很强,所以稍稍翻车。

第二题code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
struct node{
    int l, r;
    friend bool operator < (node A,node B) {
        if(A.l==B.l) return A.r>B.r;
        return A.l<B.l;
    }
}a[N];
int n,k;
bool check(int x){
    int cnt=0;
    for(int i=1;i<=n;i++){
        if (a[i].l<=x) cnt+=min(x,a[i].r)-a[i].l+1;
    }
    return cnt>=k;
}
int main() {
    freopen("thekth.in","r",stdin);
    freopen("thekth.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i].l,&a[i].r);
    }
    scanf("%d",&k);
    int l=-1e9,r=1e9,ans=0;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid)){
            ans=mid;
            r=mid-1;
        } else l=mid+1;
    }
    printf("%d\n",ans);
    return 0;
}

标签:总结,node,return,int,个数,20220906,mid,二分
来源: https://www.cnblogs.com/LZMiiu/p/16663994.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有