Acwing 蓝桥杯 第二章 二分与前缀和

news2024/11/14 21:32:54

今天来补一下之前没写的总结,题是写完了,但是总结没写

感觉没什么好总结的啊,就当打卡了

789. 数的范围 - AcWing题库

思路:

一眼二分,典中典

先排个序,再用lower_bound和upper_bound维护相同的数的左界和右界就好了

注意特判无解

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=1e5+10;
const int mxe=2e5+10;
using namespace std;



int n,q,x;
int a[mxn];
bool check(int x){
    return x>=0&&x<=n-1;
}
void solve(){
    cin>>n>>q;
    for(int i=0;i<n;i++) cin>>a[i];
    while(q--){
        cin>>x;
        int pos1=lower_bound(a,a+n,x)-a;
        int pos2=upper_bound(a,a+n,x)-a-1;
        if((!check(pos1)||!check(pos2))||(pos1>pos2)) cout<<-1<<" "<<-1<<'\n';
        else cout<<pos1<<" "<<pos2<<'\n';
    }
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

790. 数的三次方根 - AcWing题库

思路:

注意到答案具有单调性,因此二分即可

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=1e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;




double n,ans;
bool check(double x){
    return x*x*x>=n;
}
void solve(){
    cin>>n;
    double l=-10000.0,r=10000.0;
    while(abs(r-l)>eps){
        double mid=(l+r)/2;
        if(check(mid)){
            ans=mid;
            r=mid;
        }else l=mid;
    }
    cout<<fixed<<setprecision(6)<<ans<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

AcWing 795. 前缀和 - AcWing

思路:

大一学弟也会写的前缀和板子

Code:

#include <bits/stdc++.h>
#define int long long
const int mxn=1e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;




int n,m,l,r;
int a[mxn],sum[mxn];
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i],sum[i]=sum[i-1]+a[i];
    while(m--){
        cin>>l>>r;
        cout<<sum[r]-sum[l-1]<<"\n";
    }
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

796. 子矩阵的和 - AcWing题库

同样是大一学弟也会的二维前缀和,但是我可能不太会,嘻

Code:

#include <bits/stdc++.h>
#define int long long
#define y1 Y1
const int mxn=1e3+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;




int n,m,q,x1,y1,x2,y2;
int a[mxn][mxn],sum[mxn][mxn];
void solve(){
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) cin>>a[i][j];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]+a[i][j]-sum[i-1][j-1];
    }
    while(q--){
        cin>>x1>>y1>>x2>>y2;
        cout<<sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]<<'\n';
    }
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

730. 机器人跳跃问题 - AcWing题库

思路:

答案具有二分性,可以直接二分

然后在check函数里去模拟这个过程,如果中间存在能量值<0的情况就false,否则如果出现大于maxH的情况,那么剩下的只会得到,因此直接true就好了

Code:

#include <bits/stdc++.h>
#define int long long
#define y1 Y1
const int mxn=1e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;



int n,mx=-1;
int h[mxn];
bool check(int x){
    int res=x;
    for(int i=0;i<=n;i++){
        if(h[i+1]>res){
            res-=(h[i+1]-res);
        }else{
            res+=(res-h[i+1]);
        }
        if(res>=mx) return true; 
        if(res<0) return false;
    }
    return res>=0;
}
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>h[i],mx=max(mx,h[i]);
    int l=0,r=1e5;
    int ans;
    while(l<=r){
        int mid=l+r>>1;
        if(check(mid)){
            ans=mid;
            r=mid-1;
        }else l=mid+1;
    }
    //check(19);
    cout<<ans<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

AcWing 1221. 四平方和 - AcWing

思路:

四指针枚举,想到先把两个指针的结果哈希一下,然后再去枚举两个指针,一个指针的复杂度是sqrt(n),两个就是O(n)的了

Code:

#include <bits/stdc++.h>
#define int long long
#define y1 Y1
const int mxn=2e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;


map<int,pair<int,int> > v;
int n,len=0;
void solve(){
    cin>>n;
    for(int i=0;i*i<=n;i++){
        for(int j=0;i*i+j*j<=n;j++){
            v[i*i+j*j]={i,j};
        }
    }
    for(int i=0;i*i<=n;i++){
        for(int j=0;i*i+j*j<=n;j++){
            if(v.count(n-i*i-j*j)){
                cout<<i<<" "<<j<<" "<<v[n-i*i-j*j].second<<" "<<v[n-i*i-j*j].first<<'\n';
                return;
            }
        }
    }
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

1227. 分巧克力 - AcWing题库

思路:

直接去二分边长,然后去check函数计算能有多少巧克力块就行

Code:

#include <bits/stdc++.h>
#define int long long
#define y1 Y1
const int mxn=1e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;
struct ty{
    int h,w;
}p[mxn];


int n,k;
bool check(int x){
    int res=0;
    for(int i=1;i<=n;i++){
        res+=(p[i].h/x)*(p[i].w/x);
    }
    return res>=k;
}
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>p[i].h>>p[i].w;
    int l=1,r=1e5;
    int ans;
    while(l<=r){
        int mid=l+r>>1;
        if(check(mid)){
            ans=mid;
            l=mid+1;
        }else r=mid-1;
    }
    cout<<ans<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

99. 激光炸弹 - AcWing题库

思路:

数据范围都比较小,因此可以直接求个二维前缀和,然后求二维差分,维护最大值即可

#include <bits/stdc++.h>
//#define int long long
#define y1 Y1
const int mxn=5e3+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;



int n,r,x,y,w;
int a[mxn][mxn];
void solve(){
    cin>>n>>r;
    r=min(r,5001);
    for(int i=1;i<=n;i++){
        cin>>x>>y>>w;
        x++,y++;
        a[x][y]+=w;
    }
    for(int i=1;i<=5001;i++){
        for(int j=1;j<=5001;j++) a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
    }
    int ans=-1e9;
    for(int i=1;i+r-1<=5001;i++){
        for(int j=1;j+r-1<=5001;j++){
            int x1=i,y1=j;
            int x2=i,y2=j+r-1;
            int x3=i+r-1,y3=j;
            int x4=i+r-1,y4=j+r-1;
            int S=a[x4][y4]-a[x2-1][y2]-a[x3][y3-1]+a[x1-1][y1-1];
            ans=max(ans,S);
        }
    }
    cout<<ans<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

1230. K倍区间 - AcWing题库

思路:

很典,直接求前缀和,然后对前缀和取模k,两个模为0的点就可以作为k倍区间端点,然后用动态map维护即可,也可以算C(n,2)

Code:

#include <bits/stdc++.h>
#define int long long
#define y1 Y1
const int mxn=1e5+10;
const int mxe=2e5+10;
const double eps=1e-8;
using namespace std;


map<int,int> mp;
int n,k;
int a[mxn],sum[mxn];
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i],sum[i]=sum[i-1]+a[i],sum[i]%=k;
    int ans=0;
    for(int i=1;i<=n;i++){
        ans+=mp[sum[i]];
        mp[sum[i]]++;
    }
    cout<<ans+mp[0]<<'\n';
}
void init(){}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;//cin>>__;
    init();
    while(__--)solve();return 0;
}

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

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

相关文章

Google Guice 4:Bindings(2)

4 Scopes (实例的作用域&#xff09; 4.1 默认规则&#xff1a;unreuse instance 到目前为止&#xff0c;通过bind().to()和Provides定义的binding&#xff0c;每次需要注入实例对象时&#xff0c;Guice都会创建一个新的实例 // 修改DatabaseTransactionLog&#xff0c;使其打…

【python学习笔记】:SQL常用脚本(二)

11、四舍五入ROUND函数 ROUND ( numeric_expression , length [ ,function ] ) function 必须为 tinyint、smallint 或 int。 如果省略 function 或其值为 0&#xff08;默认值&#xff09;&#xff0c;则将舍入 numeric_expression。 如果指定了0以外的值&#xff0c;则将截…

TypeScript笔记-进行中

学习来源&#xff1a; 本笔记由尚硅谷教学视频整理而来 文章目录学习来源&#xff1a;一.TS简介TypeScript是什么TypeScript增加了什么二环境搭建安装nvm环境搭建二.TypeScript中的基本类型类型声明类型类型示例代码三.编译配置自动编译文件自动编译整个项目四.使用webpack打包…

一文掌握如何轻松稿定项目风险管理【静说】

风险管理对于每个项目经理和PMO都非常重要&#xff0c;如果管理不当会出现很多问题&#xff0c;咱们以前分享过很多风险管理的内容&#xff1a; 风险无处不在&#xff0c;一旦发生&#xff0c;会对一个或多个项目目标产生积极或消极影响的确定事件或条件。那么接下来介绍下五大…

在成都想转行IT,选择什么专业比较好?

很多创新型的互联网服务公司的核心其实都是软件&#xff0c;创新的基础、运行的支撑都是软件。例如&#xff0c;软件应用到了出租车行业&#xff0c;就形成了巅覆行业的滴滴;软件应用到了金融领域&#xff0c;就形成互联网金融;软件运用到餐饮行业&#xff0c;就形成美团;软件运…

学渣适用版——Transformer理论和代码以及注意力机制attention的学习

参考一篇玩具级别不错的代码和案例 自注意力机制 注意力机制是为了transform打基础。 参考这个自注意力机制的讲解流程很详细&#xff0c; 但是学渣一般不知道 key&#xff0c;query&#xff0c;value是啥。 结合B站和GPT理解 注意力机制是一种常见的神经网络结构&#xff0…

[计算机网络(第八版)]第二章 物理层(复习笔记)

2.1 物理层的概念 物理层是屏蔽掉传输媒体和通信手段的差异&#xff0c;为数据链路层提供一个统一的数据传输服务&#xff0c;将比特流按照传输媒体的需要进行编码&#xff0c;然后将信号通过传输媒体传输到下一个节点的物理层&#xff0c;并不是指具体的传输媒体。用于物理层…

一文带你看懂:如何进行一次高质量CR?

程序员对代码评审&#xff08;Code Review&#xff09;不可谓不熟悉&#xff0c;而代码评审也已经是许多组织的标准化实践。结合笔者的五年多的开发经验&#xff0c;既有经历过零CR的小组织&#xff0c;也有接触过完善CR规范的大厂团队。对于“如何进行一次--高质量的组内代码C…

力扣-销售员

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;607. 销售员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …

【测试】自动化测试03(JUnit)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录JUnit一&#xff09; 注解1. Test2. BeforeEach3. BeforeAll4. AfterEach5. AfterAll二&#xff09; 断言&#xff08;Assertions类&#xff09;三&#xff09;用例的执行顺序四&#xff09;参数化五&#xff09;测试…

Qt windeployqt.exe 打包qml

Qt系列文章目录 文章目录Qt系列文章目录前言一、遇到的坑二、参考前言 我们在QtCreator下面开发程序&#xff0c;一般都会遇到工程发布给客户使用的情况。我们通常会使用Qt自带的打包工具&#xff1a;windeployqt.exe。 windeployqt.exe是Qt自带的工具&#xff0c;用于创建应用…

使用windwow windbg 吃透64位分页内存管理

前言 分页基础概念是操作系统基础知识&#xff0c;网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之&#xff1a;CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…

力扣-变更性别

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;627. 变更性别二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言…

算法设计与分析期末考试复习(三)

动态规划 动态规划算法与分治法类似&#xff0c;其基本思想也是将待求解问题分成若干个子问题。但是经分解得到的子问题往往不是互相独立的。在用分治法求解时&#xff0c;有些子问题被重复计算机了许多次。 如果能够保存已解决的子问题的答案&#xff0c;而在需要时再找出已求…

Scala-抽象类、匿名子类、伴生对象、单例模式

抽象类 匿名子类 伴生对象&#xff08;单例对象&#xff09; 单例设计模式 抽象类 定义抽象类&#xff1a;abstract class Person{} //通过 abstract 关键字标记抽象类定义抽象属性&#xff1a;val|var name:String //一个属性没有初始化&#xff0c;就是抽象属性定义抽象…

应用场景六:同时支持CP343和CP341功能(Modbus连接仪表,以太网连接WINCC)

应用描述&#xff1a; 桥接器同时支持西门子PLC的CP343以太网通讯模块和CP341串口通讯模块的功能。可以同时通过ModbusRTU连接仪表、变频器等串口设备&#xff0c;同时可以通过网口连接组态监控软件WINCC。PLC内部不需要编程&#xff0c;也不需要进行硬件组态配置&#xff0c;…

FME+YOLOV7写DNF自动刷图脚本

目录 前言 一、难点分析 二、实现流程 1.DNF窗口位置获取 2.获取训练数据 3.数据标注 4.数据格式转换 5.数据训练 5.刷图逻辑编写 前言 这是一篇不务正业的研究&#xff0c;首先说明&#xff0c;这不是外挂&#xff01;这不是外挂&#xff01;这不是外挂&#xff01;这只是用a…

【网络原理10】构造HTTP请求、HTTPS加密

目录 一、构造HTTP请求 ①使用form表单构造HTTP请求&#xff1a; form表单是如何提交的 form提交的缺点 ②基于ajax构造http请求 如何使用Jquery框架 二、HTTPS 运营商劫持 HTTP的加密版本&#xff1a;HTTPS ①对称加密&#xff1a;客户端和服务端使用同一把密钥&…

【AcWing】差分及其应用

&#x1f386;音乐分享 光辉岁月 (粤语版)_BEYOND 所谓差分&#xff0c;就是前缀和的逆运算 &#xff08;不懂前缀和的同学可以去C站看一下&#x1f602;&#xff09; 797. 差分 - AcWing题库 代码 #include<iostream> using namespace std; const int N 1e5 10…

怎样选择运动耳机、5款最佳运动蓝牙耳机推荐

你是否在跑步时大幅度抖动让耳机松落&#xff0c;不得不一遍又一遍的塞紧耳机&#xff1f;你是否在游泳时因为耳机进水而懊恼自己大意&#xff1f;没错&#xff0c;在运动过程中这些情况我都有遇到过&#xff01;运动耳机因其使用都是在跑步、游泳、骑行、徒步等场景&#xff0…