第 7 场 小白入门赛

news2024/11/17 13:27:33

第5题 :兽之泪【算法赛】

AC_Code:C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int>PII;

#define x first
#define y second
#define ls u<<1
#define rs u<<1|1
#define all(ss) ss.begin(),ss.end()
#define pb push_back

int const mod1=998244353,mod2=1e9+7;  
int const base=131;
int const N=2e5+7;
int const INF=0x3f3f3f3f;
LL const INFF=0x3f3f3f3f3f3f3f3f;

int n,m,q;
PII a[N];
string s,t;
vector<int>e[N];

void solve(){
    
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)    scanf("%d%d",&a[i].x,&a[i].y);
    sort(a,a+(n-1));
       
       LL ans1=0,ans2=0;
       int t=m,mi=INF;
       for(int i=0;i<n;i++){    //不用最后一个数
           if(mi<a[i].x){
            ans1+=1LL*t*mi;
            t=0;    break;
        }
        ans1+=a[i].x;
        if(--t==0)    break;
        mi=min(mi,a[i].y);
       }
       ans1+=1LL*t*mi;
       
       t=m;    mi=INF;
       for(int i=0;i<n;i++){    //用最后一个数
        ans2+=a[i].x;
        if(--t==0)    break;
        mi=min(mi,a[i].y);    
       }
       ans2+=1LL*t*mi;
   
    cout<<min(ans1,ans2);
       
} 

void init(){                     
    
}

int main()
{
    //std::ios::sync_with_stdio(false);   cin.tie(0); cout.tie(0);
    init();
    int T=1;
    //cin>>T;
    //scanf("%d",&T);
    
    while(T--){
        solve();
    }
    
    return 0;
}

AC_Code:java

// package A;
import java.util.*;
import java.io.*;

public class Main{

    static final int N=(int)2e5+7;
    static int mod1=(int)998244353,mod2=(int)1e9+7;
    static long mod=3185689261L;
    static int INF=0x3f3f3f3f;
    static long INFF=0x3f3f3f3f3f3f3f3fL;
    static Node[] a=new Node[N];
    static int n,m;
    static List<Integer>[] g=new ArrayList[N];


    public static void solve()throws IOException{
        //Arrays.setAll(g,e->new ArrayList<>());
        n=nextInt(); m=nextInt();
        for(int i=0;i<n;i++)    a[i]=new Node(nextInt(),nextInt());
        Arrays.sort(a,0,n-1);   //怪兽之王,只能最后打


        int m1=m;
        long ans1=0,ans2=0;
        int mi=INF;
        for(int i=0;i<n&&m1>0;i++){ //有更小贡献,就提前计算贡献
            if(mi<a[i].x){
                ans1+=1L*mi*m1;
                m1=0;
                break;
            }
            ans1+=a[i].x;   m1--;
            mi=Math.min(mi,a[i].y);
        }
        ans1+=1L*mi*m1;

        mi=INF; m1=m;
        for(int i=0;i<n&&m1>0;i++){ //可以打怪兽之王的话就打,看是否有更小的贡献
            ans2+=a[i].x;   m1--;
            mi=Math.min(mi,a[i].y);
        }
        ans2+=1L*mi*m1;
        pw.println(Math.min(ans1,ans2));
        pw.flush();

    }

    static void init(){

    }


    public static void main(String[] args)throws IOException{
        init();
        int T=1;
        // T=nextInt();
        while(T-->0){
            solve();
        }

    }

    static Scanner sc=new Scanner(System.in);
    //这个读字符串可以带有空格,br.readLine(),不用刷新缓存区
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    //读字符串时空格,回车,换行都进行分割
    static StreamTokenizer st = new StreamTokenizer(br);

    //pw.println(),没写一次记得刷新缓存区pw.flush()
    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));

    public static int nextInt() throws IOException { st.nextToken(); return (int)st.nval; }
    public static long nextLong() throws IOException { st.nextToken(); return (long)st.nval; }

    public static float nextFloat() throws IOException{ st.nextToken(); return (float)st.nval; }
    //st读的本来就是double类型
    public static double nextDouble() throws IOException{ st.nextToken(); return st.nval; }


}

class Node implements Comparable<Node>{
    int x,y;

    public Node() {
    }

    public Node(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int compareTo(Node o){
        return Integer.compare(x,o.x);  //升序
    }
}

第6题:矩阵X【算法赛】

AC_Code:C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<stack>
#include<cmath>
#include <unordered_set>
#include <unordered_map>
#include<set>
#include <map>

using namespace std;
typedef long long LL;
int const N=1e6+7;

int n,m,n1,m1;
int q1[N],q2[N];
int head1,head2,tail1,tail2;

int main()
{
    scanf("%d%d%d%d", &n, &m,&n1,&m1);
    vector<vector<int>> a(n+1,vector<int>(m+1));
    vector<vector<int>> mx(n+1,vector<int>(m+1));
    vector<vector<int>> mi(n+1,vector<int>(m+1));
    vector<vector<LL>> pre(n+1,vector<LL>(m+1));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    
//    先对每一行,跑一个滑动窗口        
    for(int i=1;i<=n;i++){
        head1=head2=0;
        tail1=tail2=-1;
        for(int j=1;j<=m;j++){
            while(tail1>=head1&&a[i][j]<=a[i][q1[tail1]])    tail1--;
            q1[++tail1]=j;
            if(tail1>=head1&&j-m1+1>q1[head1])   head1++;    //滑出窗口
            if(j>=m1) mi[i][j-m1+1]=a[i][q1[head1]];
            
            while(tail2>=head2&&a[i][j]>=a[i][q2[tail2]])   tail2--;
            q2[++tail2]=j;
            if(tail2>=head2&&j-m1+1>q2[head2])   head2++;
            if(j>=m1) mx[i][j-m1+1]=a[i][q2[head2]];
        }
    }
    
    //对每一列跑一遍滑动窗口
    for(int j=1;j<=m;j++){
        head1=head2=0;
        tail1=tail2=-1;
        for(int i=1;i<=n;i++){
            while(tail1>=head1&&mi[i][j]<=mi[q1[tail1]][j])   tail1--;
            q1[++tail1]=i;
            if(tail1>=head1&&i-n1+1>q1[head1])   head1++;
            if(i>=n1)    mi[i-n1+1][j]=min(mi[i-n1+1][j],mi[q1[head1]][j]);
            
            while(tail2>=head2&&mx[i][j]>=mx[q2[tail2]][j])   tail2--;
            q2[++tail2]=i;
            if(tail2>=head2&&i-n1+1>q2[head2])   head2++;
            if(i>=n1)    mx[i-n1+1][j]=max(mx[i-n1+1][j],mx[q2[head2]][j]);
        }
    }
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            pre[i][j]=pre[i][j-1]+pre[i-1][j]-pre[i-1][j-1]+a[i][j];
        }
    
    long long ans=0;  //枚举起点,更新答案
    for(int i=1;i<=n-n1+1;i++)
        for(int j=1;j<=m-m1+1;j++){
            int x2=i+n1-1,y2=j+m1-1;
            ans=max(ans,(pre[x2][y2]-pre[x2][j-1]-pre[i-1][y2]+pre[i-1][j-1])*(mx[i][j]-mi[i][j]));
        }
            
            
    cout<<ans<<endl;

    return 0;
}

AC_Code:java

// package A;
import java.util.*;
import java.io.*;

public class Main{

    static final int N=(int)2e5+7;
    static int mod1=(int)998244353,mod2=(int)1e9+7;
    static long mod=3185689261L;
    static int INF=0x3f3f3f3f;
    static long INFF=0x3f3f3f3f3f3f3f3fL;
    static int[] a=new int[N];
    static int n,m;
    static List<Integer>[] g=new ArrayList[N];


    public static void solve()throws IOException{
        n=nextInt(); m=nextInt();
        int n1=nextInt(),m1=nextInt();
        int[][] a=new int[n+1][m+1];
        int[][] mx=new int[n+1][m+1];
        int[][] mi=new int[n+1][m+1];
        long[][] pre=new long[n+1][m+1];
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                a[i][j]=nextInt();
                pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];
            }
        }

        int[] q1=new int[n*m+1],q2=new int[n*m+1];
        int tt1=-1,hh1=0,tt2=-1,hh2=0;

        //列
        for(int i=1;i<=n;i++){
            tt1=-1; hh1=0; tt2=-1; hh2=0;
            for(int j=1;j<=m;j++){
                //小
                while(tt1>=hh1&&a[i][q1[tt1]]>=a[i][j]) tt1--;
                q1[++tt1]=j;
                if(j-q1[hh1]+1>m1)  hh1++;
                if(j>=m1)   mi[i][j-m1+1]=a[i][q1[hh1]];

                //大
                while(tt2>=hh2&&a[i][q2[tt2]]<=a[i][j]) tt2--;
                q2[++tt2]=j;
                if(j-q2[hh2]+1>m1)  hh2++;
                if(j>=m1)   mx[i][j-m1+1]=a[i][q2[hh2]];
            }
        }

        //行
        for(int j=1;j<=m;j++){
            tt1=-1; hh1=0; tt2=-1; hh2=0;
            for(int i=1;i<=n;i++){
                //小
                while(tt1>=hh1&&mi[q1[tt1]][j]>=mi[i][j]) tt1--;
                q1[++tt1]=i;
                if(i-q1[hh1]+1>n1)  hh1++;
                if(i>=n1)   mi[i-n1+1][j]=Math.min(mi[i-n1+1][j],mi[q1[hh1]][j]);

                //大
                while(tt2>=hh2&&mx[q2[tt2]][j]<=mx[i][j])   tt2--;
                q2[++tt2]=i;
                if(i-q2[hh2]+1>n1)  hh2++;
                if(i>=n1)   mx[i-n1+1][j]=Math.max(mx[i-n1+1][j],mx[q2[hh2]][j]);
            }
        }

        long ans=0;
        for(int i=1;i+n1-1<=n;i++){
            for(int j=1;j+m1-1<=m;j++){
//                pw.print(mx[i][j]+"*"+mi[i][j]+" ");
                int x2=i+n1-1,y2=j+m1-1;
                ans=Math.max(ans,(pre[x2][y2]-pre[x2][j-1]-pre[i-1][y2]+pre[i-1][j-1])*(mx[i][j]-mi[i][j]));
            }
//            pw.println();
        }


        pw.println(ans);
        pw.flush();
    }

    static void init(){

    }


    public static void main(String[] args)throws IOException{
        init();
        int T=1;
        // T=nextInt();
        while(T-->0){
            solve();
        }

    }

    static Scanner sc=new Scanner(System.in);
    //这个读字符串可以带有空格,br.readLine(),不用刷新缓存区
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    //读字符串时空格,回车,换行都进行分割
    static StreamTokenizer st = new StreamTokenizer(br);

    //pw.println(),没写一次记得刷新缓存区pw.flush()
    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));

    public static int nextInt() throws IOException { st.nextToken(); return (int)st.nval; }
    public static long nextLong() throws IOException { st.nextToken(); return (long)st.nval; }

    public static float nextFloat() throws IOException{ st.nextToken(); return (float)st.nval; }
    //st读的本来就是double类型
    public static double nextDouble() throws IOException{ st.nextToken(); return st.nval; }


}

class Node implements Comparable<Node>{
    int x,y;

    public Node() {
    }

    public Node(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int compareTo(Node o){
        return Integer.compare(x,o.x);  //升序
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构高阶】图

目录 一、图的基本概念 二、 图的存储结构 2.1 邻接矩阵 2.2.1 邻接矩阵存储模式的代码实现 2.2.2 邻接矩阵存储的优缺点 2.2 邻接表 2.2.1 无向图的邻接表 2.2.2 有向图的邻接表 2.2.3 邻接表存储模式的代码实现 2.2.4 邻接表存储的优缺点 三、图的遍历 3.1 图的…

[linux]信号处理:信号编码、基本API、自定义函数和集合操作的详解

一、信号的概述 1、定义 信号是 Linux 进程间通信的最古老的方式。信号是软件中断&#xff0c;它是在软件层次 上对中断机制的一种模拟&#xff0c;是一种异步&#xff08;不等待&#xff09;通信的方式 。信号可以导致一个正在运行的进程被 另一个正在运行的异步进程中断&a…

RHEL8部署baichuan2环境

前置 1、安装NVIDIA驱动 https://www.nvidia.cn/Download/index.aspx?langcn 阿里云 Alibaba Cloud Linux 3.2104 LTS 64位&#xff0c;需要选择RHEL8&#xff0c;如果没有RHEL8&#xff0c;则选最下面那个选择所有操作系统 点击搜索&#xff0c;下载这里有安装步骤&#x…

Datawhale【Sora原理与技术实战】| 学习笔记3

目录 一. 训练 Sora 模型二. 数据预处理三. 视频 VQVAE四. Diffusion Transformer 一. 训练 Sora 模型 Open-Sora 在下图中总结了 Sora 可能使用的训练流程&#xff1a; 链路: 二. 数据预处理 目前主流 LLM 框架缺乏针对 video 数据 统一便捷的管理和处理能力&#xff0c;…

天水麻辣烫:麻辣鲜香,地城风情尽在其中

天水麻辣烫&#xff0c;这道源自甘肃天水的地道美食&#xff0c;早已成为当地饮食文化中不可或缺的一部分。追溯其源头&#xff0c;它脱胎于上世纪80、90年代的麻辣粉&#xff0c;那时的麻辣粉&#xff0c;以土豆粉和土豆片为主&#xff0c;辅以香辣的油泼辣子&#xff0c;简单…

【C++ 】stack 和 queue

1. 标准库中的stack stack 的介绍&#xff1a; 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作 2. stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其…

月结常见工单异常情况处理

1. 上月已经结算的工单&#xff0c;本月打开投料或者报工&#xff0c;或者增加产出 或者撤销报工修正报工 如果针对结算的订单&#xff0c;打开重新投料。 月末对工单重新结算&#xff0c;转出差异 KKS2单个处理&#xff08;KKS1集中处理&#xff09; 差异计算 KO88单个结算…

ThreadLocal基本原理

ThreadLocal基本原理 一、定义 ThreadLocal是java中所提供的线程本地存储机制&#xff0c;可以利用改机制将数据缓存在线程内部&#xff0c;该线程可以在任意时刻、任意方法中获取数据 二、底层原理 ThreadLocal底层是通过ThreadLocalMap来实现的&#xff0c;每个Thread对象中…

短剧APP系统开发:打造全新的掌上剧场体验

随着移动互联网的普及和人们娱乐方式的多样化&#xff0c;短剧已经成为现代人生活中不可或缺的一部分。为了满足用户对高质量、便捷观看短剧的需求&#xff0c;我们致力于开发一款功能全面、操作简便的短剧APP系统&#xff0c;为用户带来前所未有的掌上剧场体验。 一、系统开发…

AJAX 04 回调函数地狱和 Promise 链式调用、async 和 await、事件循环

AJAX 学习 AJAX 04 进阶01 同步代码和异步代码02 回调函数地狱和 Promise 链式调用(1) 回调函数地狱(2) Promise 链式调用(3) Promise 链式应用 03 async 和 await(1) async 和 await 使用(2) async函数和await捕获错误 04 事件循环-EventLoop(1) 事件循环(2) 事件循环练习(3) …

FREERTOS简介、移植和系统配置(基于STM32F103)

本文基础内容参考的是正点原子的FREERTOS课程。 这是基于HAL库的 正点原子手把手教你学FreeRTOS实时系统 这是基于标准库的 正点原子FreeRTOS手把手教学-基于STM32 基础知识&#xff0c;直接参考正点原子《FreeRTOS开发指南V1.1》基于标准库的&#xff0c;此处不再赘述。 本文…

SwiftUI的context Menu

SwiftUI的 context Menu 现在来演示一下如何使用 SwiftUI 的 Context Menu 。 代码&#xff1a; import SwiftUIstruct ContextMenuBootCamp: View {State var bgColor: Color .purplevar body: some View {VStack(alignment: .leading, spacing: 10.0) {Image(systemName: …

【LeetCode】升级打怪之路 Day 21:二叉树的最近公共祖先(LCA)问题

今日题目&#xff1a; 236. 二叉树的最近公共祖先1644. 二叉树的最近公共祖先 II235. 二叉搜索树的最近公共祖先 目录 LCA 问题LC 236. 二叉树的最近公共祖先 【classic】LC 1644. 二叉树的最近公共祖先 II 【稍有难度】LC 235. 二叉搜索树的最近公共祖先 ⭐⭐⭐ 今天做了几道有…

电源常用电路—驱动电路详解

数字电源控制核心对输入输出参数进行采集后&#xff0c;利用控制算法进行分析从而产生PWM控制信号&#xff0c;PWM信号将经过驱动电路的进行功率放大和隔离&#xff0c;随后接入功率开关器件从而完成电源的输出控制。本篇将主要针对电源的驱动电路进行讲解。 一、驱动电路概述…

高效Go编程: encoding/csv标准库深度解析

高效Go编程: encoding/csv标准库深度解析 引言了解encoding/csv库CSV文件的基本结构encoding/csv库的核心功能应用场景 读取CSV文件基本步骤代码示例处理不同的分隔符错误处理 处理CSV数据数据解析代码示例处理不规则数据代码示例 写入CSV文件基本步骤代码示例自定义设置错误处…

C语言——详解字符函数和字符串函数(一)

Hi,铁子们好呀&#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下&#xff1a; 文章目录 &#x1f386;1.字符分类函数&#x1f4af;&#x1f4af;⏩1.1 什么是字符分类函数的&#xff1f;&#x1f4af;&#x1f4af;⏩1.2 字符函数的类型有哪…

DXP软件界面显示“No Hard Devices”【简单的操作问题】加【软件下载】

目录 一&#xff0c;DXP软件界面显示“No Hard Devices” 二&#xff0c;软件下载的百度网盘资源 一&#xff0c;DXP软件界面显示“No Hard Devices” Protel DXP是2004是澳大利亚Altium公司于2002年推出的一款电子设计自动化软件。它的主要功能包括&#xff1a;原理图编辑、印…

北斗卫星推动数智油田建设

北斗卫星推动数智油田建设 中国石油大港油田采油三厂深入推动北斗智能终端在智能巡检、安全监督、油井导航、坐标测绘等多场景应用&#xff0c;实现了人工查井向智能巡检的变革。截至2月下旬&#xff0c;场景覆盖率达100%&#xff0c;高效助推大港南部“双高”老区数智油田建设…

修改vscode的相对路径计算逻辑

vscode的相对路径计算逻辑是&#xff0c;"./"表示当前项目的文件夹&#xff0c;而不是当前文件所在的文件夹 做出如下修改&#xff1a; File-->Preferences-->settings 搜索Execute in File Dir , 然后取消勾选

TikTok新手如何起号?环境因素与内容创新技巧

相信很多刚入行的TikTok玩家都遇到过一个难题&#xff0c;那就是账号权重低&#xff0c;播放量在个位数徘徊&#xff0c;其实都是因为还没起号&#xff01;那么具体如何起号呢&#xff1f;下面小编也给大家分享一下技巧。 一、如何起号 1、明确注册 TikTok 账号的目的 无论是…