NOIP2024模拟12:孤帆远影

news/2024/10/7 8:25:48

NOIP2024模拟12:孤帆远影

听了机房同学的讨论,于是T1死磕冒泡和逆序对做法。最后只得了40pts。

思想对了,但不是自己的做法。

还是要坚持自己想,坚持自己可以想出来,不要被任何人带偏。

T1

  • 一句话题意:将一个已知序列通过不断“交换相邻位置”的操作调整成不严格单峰状态,问最小的操作次数。

  • 有一种猜想是只要钦定了峰顶的位置,那么左右两边是不会交叉的。

    • 但这个猜想是错误的,它的证伪可以通过正解来理解
  • 正解:假设题目要求我们调成升序,那么答案就是逆序对的数量。

  • 现在是什么呢?要求前半段升序后半段降序。

  • 那就分开逆序对!

  • 具体来说,对于第 \(i\) 个数,想要待在左区间, 就必须穿过左边比它大的每个数,即在它左边的逆序对数量,待在右区间同理.

  • 由于峰顶的位置不做限制,所以我们只需要看每个数放左边移动步数少一点,还是放右边少一点,就行了.

  • 用树状数组求逆序对即可,只不过是正着倒着各扫一遍.

  • 所以此题我很早就陷入了一个误区:枚举峰顶的位置,想来这其实不是题目所求.把自己限制住了!

    • 下次考试应该先在草稿本上写出这个想法.尝试一段时间返回去检查自己的思想是不是除了问题的时候,就方便大胆地走出误区.

    时间复杂度 \(O(N log N)\)

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define int long long
    #define lowbit(x) (-x&x)
    using namespace std;
    using ll = long long;
    const int N=2e5+5;
    int n,pos=0,mx=0;
    ll L[N],R[N],ans=0;
    ll a[N],tr[N];
    void add(int x){for(;x<=mx;x+=lowbit(x)) tr[x]++;
    }
    int ask(int x){int res=0;for(;x>=1;x-=lowbit(x)) res+=tr[x];return res;
    }
    signed main(){//freopen("inde.in","r",stdin);//freopen("inde.out","w",stdout);ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin>>n;F(i,1,n) cin>>a[i],mx=max(mx,a[i]);	F(i,1,n){add(a[i]);L[i]=i-ask(a[i]);}memset(tr,0,sizeof(tr));G(i,n,1){add(a[i]);R[i]=n-i+1-ask(a[i]);}F(i,1,n){//the fjxans+=min(L[i],R[i]);	}cout<<ans;return 0;	
    }
    

T2

  • 一句话题意:给定一个起点,你现在需要依次抵达 \(n\) 个目标区间,既可以亲自去,也可以请别人代劳,但花费都是起终点之间的距离(允许亲自走一半再代劳一半).问最少的花费.

  • 有点儿抽象,还没有完全理解,尝试着解释一下:

  • \(f[i][j]\) 表示第 \(i\) 次游历最终到达 \(j\) 的最小花费.

    • 首先从 \(f[i-1]\) 继承dp值
    • 对于操作1: \(j\)\([l_i,r_i]\) 的最近距离即为此部分贡献.
    • 对于操作2:用 \(f[i][j]+1\) 更新 \(f[i][j-1]\)\(f[i][j+1]\)
  • 最关键的一步:根据操作2,对于每个 \(i\), 将 \(f[i][j]\) 看成关于 \(j\) 的函数,则一定长这个样子:

  • 转移时,维护中间平的那一段,最后得到的贡献一定就是最优的.(感性理解一下)

  • 时间复杂度 \(O(N)\)

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define int long long
    using namespace std;
    using ll = long long;
    const int N=5e5+105;
    int n,x;
    signed main(){
    //	freopen("festival.in","r",stdin);
    //	freopen("festival.out","w",stdout);ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin>>n>>x; int l=x,r=x,L,R;ll ans=0;while(n--){cin>>L>>R;if(l<=R && L<=r){if(L>l) l=L;if(R<r) r=R;}if(R<l) ans+=l-R,r=l,l=R;if(L>r) ans+=L-r,l=r,r=L;}cout<<ans;return 0;	
    }
    

T3

  • \(O(NlogN)\)\(LIS\) 的板题,只不过带了个系数而已.

  • 理解:\(C_i\)的系数只影响后续 \(C_{i+1}\) 的判断,而不影响当前判断.

  • 唯一的细节就是带系数之后的数不一定比原来小,要取 min.

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define lowbit(x) (-x&x)
    #define int long long
    using namespace std;
    using ll = long long;
    const int N=1e6+5;
    int f[N],a[N],b[N];
    int n;
    signed main(){//freopen("geranium.in","r",stdin);//freopen("geranium.out","w",stdout);ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin>>n;F(i,1,n) cin>>a[i];F(i,1,n) cin>>b[i];	int ans=0;F(i,1,n) f[i]=2e18;F(i,1,n){int pos=lower_bound(f+1,f+ans+1,a[i])-f;f[pos]=min(f[pos],a[i]*b[pos]); ans=max(ans,pos);}cout<<ans<<"\n";return 0;	
    }
    

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

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

相关文章

mORMot and Open Source friends SynProject Tutorial (SynProject教程)

mORMot and Open Source friends SynProject Tutorial--(SynProject 教程) 第一步 本页介绍SynProject的一些典型用法。 我们将为mORMot框架本身创建一个源代码存储库和相关的文档。 您要求文档,我们将通过SynProject自动生成它! 我们需要什么 因此,我们在硬盘上的D:\Dev\Li…

计算机简史第四章 电子时代之图灵机

讲讲图灵对计算机的贡献讲讲图灵对计算机的贡献 ‍ 图灵机发明的背景 阿兰马蒂森图灵 (Alan Mathison Turing)于 1921 年出生在伦敦, 从小就表现出惊人数学和科学能力。 ​​ 艾伦麦席森图灵(Alan Mathison Turing),1912-1954,英国数学家、计算机学家、逻辑学家、密码学…

Django5的环境安装

Django是基于Python的Web框架,依赖Python环境,所以需要提前安装好Python解释器。 关于Python的安装,请参考https://www.liujiangblog.com中Python教程的相关部分,这里不再赘述。 截至2024年初,Django的最新版本为5.0,发布于2023年12月,预计2025年结束支持。 Django5.0支…

如何管理文件 2024年6月10日

如何管理文件 2024年6月10日一、简介:本文的文件是指人在日常工作、生活、娱乐、交流过程中形成的各种形式的信息记录。信息记录的集合构成了文件。有的文件可以用Microsoft Office 办公软件打开,有的文件可以被MX Player、IINA播放器、完美解码播放器等各种电子设备平台中的…

statistical_c02

1. 点估计1.1 最大似然估计1.1.1 似然函数 1.1.2 最大似然估计 1.1.3 最大似然估计例子1.2 矩估计(Method of Moments, MoM)1.2.1 矩估计思想1.3 估计量的评选标准2. 区间估计2.1 置信区间2.1.1 置信区间引入 2.1.2 置信区间2.2 单个正态总体的均值和方差的置信区间2.2.1 正态…

python爬虫笔记——学习笔记—6

爬虫笔记——学习笔记—6 1.安装scrapy 打开此电脑 ![img](file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png 在桌面的上栏目输入cmd并打开再命令框中升级python:python -m pip install –upgradepip 安装scrapy : pip install scrapy 安…

PyQT5之QSS基础/子控件选择器

from PyQt5.QtWidgets import * import sysclass BasicQCSS(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QSS样式/子控件选择器")btn1 = QPushButton(self)btn1.setText("按钮1")btn1.setProperty("name", btn1)btn2 =…

面试官:你讲下接口防重放如何处理?

前言 我们的API接口都是提供给第三方服务/客户端调用,所有请求地址以及请求参数都是暴露给用户的。 我们每次请求一个HTTP请求,用户都可以通过F12,或者抓包工具fd看到请求的URL链接,然后copy出来。这样是非常不安全的,有人可能会恶意的刷我们的接口,那这时该怎么办呢?防重…