首页 > 其他分享 >牛客AB33.相差不超过k的最多数 (滑动窗口) 牛客.DP最长公共子序列牛客.春游主持人调度(二)

牛客AB33.相差不超过k的最多数 (滑动窗口) 牛客.DP最长公共子序列牛客.春游主持人调度(二)

时间:2024-10-14 18:52:52浏览次数:3  
标签:right Scanner AB33 int 牛客 public DP left

目录

牛客AB33.相差不超过k的最多数 (滑动窗口)

 牛客.DP最长公共子序列

牛客.春游

主持人调度(二)


牛客AB33.相差不超过k的最多数 (滑动窗口)

 和之前那个空调吹风属于一道题的类型,当然滑动窗口,最大值-最小值,然后<=p即可

也可以双指针来取寻找最大值和最小值

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
       
            int n = in.nextInt();
            int k = in.nextInt();
            int[]a=new int[n];
            for(int i=0;i<n;i++){
             a[i]=in.nextInt();
            }
            Arrays.sort(a);
            int left=0;
            int right=0;
            int count=0;
            while(right<n){
                while(a[right]-a[left]>k){
                    left++;
                }
                if(a[right]-a[left]<=k){
             count=Math.max(count,right-left+1);
                }
           right++;
            }
          System.out.print(count);
           
    }
}

二分,注意的是要确认,二分对应的界限,左端点是left+(right-left)/2,右端点是left+(right-left+1)/2。为什么是这两个情况,因为小于等于,和大于等于啥的要求不一样,如果左端点不+1,这样她就是两个相同的里面左边的那个,反之就是右边的那个 

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int count = 1;
        int k = in.nextInt();
        int[]a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = in.nextInt();
        }
        Arrays.sort(a);

        for (int i = 0; i < n; i++) {
            int x = Math.max(a[i] - k, 1);
            int left = 0;
            int right = n - 1;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (a[mid] >= x) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            int l = left;
            left = 0;
            right = n - 1;
            x = Math.max(a[l] + k, 1);
            while (left < right) {
                int mid = left + (right - left + 1) / 2;
                if (a[mid] > x) {
                    right = mid - 1;
                } else {
                    left = mid;
                }
            }
            count = Math.max(count, right - l + 1);
        }

        System.out.print(count);


    }
}

 牛客.DP最长公共子序列

动态规划,只要前面出来了,代码好写

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别        
            int n= in.nextInt();
            int m= in.nextInt();
            String aa=in.next();
            char[]a=aa.toCharArray();
            String bb=in.next();
            char[]b=bb.toCharArray();
            //s1中[0,i]区间以及s2中[0,j]区间中,所有子序列里面,最长的公共子序列长度
            int max=0;
            int[][]dp=new int[n+1][m+1];
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(a[i-1]==b[j-1]){
                        dp[i][j]=dp[i-1][j-1]+1;
                    }else{
                         dp[i][j]=Math.max(dp[i][j-1],dp[i-1][j]);
                    }
                    max=Math.max(dp[i][j],max);

                }
            }
System.out.println(max);


    }
}

牛客.春游

模拟,贪心,有点微微像蓝桥杯的食堂,但是情况比食堂会简单一点

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner in=new Scanner(System.in);
        int T=in.nextInt();
       
        for(int i=0;i<T;i++){
            long n=in.nextLong();
            long a=in.nextLong();
            long b=in.nextLong();
            long ret=0;
            if(n<=2){
                ret=Math.min(a,b);
            }else{
            if(3*a<2*b){
                ret=n/2*a;
            if(n%2==1){  
                if(2*a<b){
                    ret+=a;
                }else{
                    ret+=b-a;
                }
             }
           }else {
                 ret=n/3*b;
                if(n%3==2){
                 ret+=Math.min(a,Math.min(b,3*a-b));
                }else if(n%3==1){
                    ret+=Math.min(a,Math.min(b,2*a-b));
                }
              }   
            }
               System.out.println(ret);
        }
        
        
   
        
    }
}

主持人调度(二)

解法一:先是按照左端点进行排序

看下面的那些7,10,17,假如这个来的数字比最小的都小,那么肯定不用比较了,直接再加一个人

public int minmumNumberOfHost (int n, int[][] s) {
        // write code here
        int ret=0;
        Arrays.sort(s,(x,y)->{
            return x[0]-y[0]?-1:1;   //如果a[0]<=y[0]返回-1,否则返回一个1。
        });
        //默认是一个小根堆
        int count=0;
        PriorityQueue<Integer>heap=new PriorityQueue<>();
        heap.offer(s[0][1]);
        for(int i=1;i<n;i++){
            int a=s[i][0];
            int b=s[i][1];
            //说明能放这个位置,无重叠,因为此时它是小根堆,堆顶是最小的元素,假如比最小元素都小,那么不用考虑,假如比最小的大,那么就说明可以放到后面,然后把这个poll()之后,在添加进去就OK
            if(a>=heap.peek()){
                heap.poll();
                heap.add(b);
            }else{
                //假如最小的都重叠
                heap.add(b);
            }
        }
        return heap.size();

    }

 

标签:right,Scanner,AB33,int,牛客,public,DP,left
From: https://blog.csdn.net/weixin_72953218/article/details/141139420

相关文章

  • scientifically practice DP
    Iunderstandyourfrustration,andit'sacommonfeelingwhentacklingcomplexproblemslikethis.Findingtheseinsightsoftencomesdowntoacombinationofexperience,practice,andasystematicapproachtoproblem-solving.Here'showyoucan......
  • HivisionIDPhotos 开源精美证件照
    马上就该考研啦,还在用某x、某xxx做证件照吗?也就用一次还得花几块钱买个会员,别当冤大头啦!最近1个月一个颠覆性的开源产品稳站GitHub榜前三,没错!他就是hivisionidphotos。博士团队开源项目,只能说太强!项目链接:https://github.com/Zeyi-Lin/HivisionIDPhotos短短1个月,竟然有1......
  • linux 操作系统下的dpkg 命令介绍和使用案例
    dpkg命令介绍dpkg是Debian及其衍生版(如Ubuntu)中用于管理软件包的底层工具。它的全称为“DebianPackage”,主要用于安装、删除、构建和管理以.deb格式存在的软件包。虽然dpkg功能强大,但它不会自动处理软件包之间的依赖关系,因此在使用时需谨慎主要功能安装软件包:使用dpkg-i......
  • 刷c语言练习题8(牛客网)
    1、如果有inta=5,b=3,在执行!a&&b++;后a和b的值分别是()A、5,3B、0,1C、0,3D、5,4答案:A解析:按照优先级顺序,先计算!a,得到0。由短路法则,b++不进行计算,又!a并没有改变a的值,所以a和b的值分别是5,3,选择选项A。2、以下程序的输出结果是()1234567main(){     ......
  • 一键生成证件照的开源利器:HivisionIDPhotos使用教程
    HivisionIDPhotos使用教程:一键生成证件照的开源利器HivisionIDPhotos 是一款开源的、轻量级且高效的AI工具,专注于证件照的自动生成。通过这一工具,用户只需上传一张自拍或其他照片,便能快速生成标准尺寸的证件照,免去前往照相馆的麻烦。它利用先进的图像处理技术,如智能抠图......
  • 【Oracle DB故障分享】分享一次由于SGA设置太小导致的DP备份失败
    Listitem今天给客户做Oracle例行数据库健康巡检,过程中检出一些备份异常,分享如下。排查问题:打开DP备份软件,随即弹出如下提示:登录DP,查看备份情况:发现从10/6开始,DP备份就没有完全成功,部分文件备份失败:OracleRecoveryBackupCatalog“Oracle8”一直备份失败:查看DP日......
  • 浅谈Java之UDP通信
    一、基本介绍        Java提供了用于处理UDP(用户数据报协议)的类和方法。UDP是一种无连接的网络协议,它允许发送端和接收端之间无需建立连接即可发送数据。在Java中,你可以使用java.net包中的DatagramSocket和DatagramPacket类来实现UDP通信。二、简单用法以下是使用......
  • 每日OJ题_牛客_NC101压缩字符串(一)_模拟_C++_Java
    目录牛客_NC101压缩字符串(一)_模拟题目解析C++代码Java代码牛客_NC101压缩字符串(一)_模拟压缩字符串(一)_牛客题霸_牛客网(nowcoder.com)描述:        利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2bc5a3。......
  • 10.12牛客CSP-S考试总结
    10.12牛客CSP-S考试总结T1大部分时间在想这题,考场上想到了如何判断不合法的情况,并对剩余情况进行分段,然后根据改变的位置在段中的位置来判断是否可以以当前这个为第一个删的。T2最后时间打了一个暴力,但是写的不够优秀,正解应该是对于二进制数按位考虑异或来进行维护。然后就对......
  • 牛客小白月赛100 A~E
    牛客小白月赛100A~EA-ACM中的A题签到不多说//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;lla[N],b[N];intmain(){ios::sync_with_stdio(false);cin.ti......