首页 > 其他分享 >正睿OI 24noip十连测day3总结

正睿OI 24noip十连测day3总结

时间:2024-09-15 21:52:26浏览次数:9  
标签:得分 OI 最大值 day3 转移 24noip 长度 times 我们

A.茵蒂克丝

题意:

给定两个序列 \(a,b\) ,每次询问 \([l,r]\) 内选出一个长度不小于 \(k\) 的子区间 \([l',r']\) ,使得 \(\frac{\sum_{i=l'}^{r'} a_i}{\sum_{i=l'}^{r'} b_i}\) 尽可能大。其中 \(k\) 为定值。

\(n,q≤1e6,k≤20\)

题解:

有结论,区间长度一定小于 \(2\times k\) ,这是显然的。如果区间长度大于这个值,不如从中间劈成两半选较大的那一部分。

有了这个结论我们可以维护以每个位置为起点,长度大于等于 \(k\) 并且小于 \(2\times k\) 的区间中值最大的一个,再套一个 \(ST\) 表。

但是我们发现最后距离 \(r\) 小于 \(2 \times k\) 的数是选不到较长的长度的,所以再对每一个数维护以这个数为起点,长度不超过 \(i\) 的最大值(其中 \(i \in [k,2k)\) ),总时间复杂度为 \(O(nk+qk)\)。

总结:

考场上傻逼了后面一部分没有预处理时间假成了 \(O(nk+qk^2)\),还开了个没必要的 \(long long\) 导致 \(85\) 都没有。

期望得分:\(100\) ,实际得分:\(70\)

B.御坂美琴

题意:

给定一张有向图,每一条边有两个信息,经过这条边需要的硬币数量 \(r_i\) 和经过后会获得的硬币数量 \(p_i\) 。

对于每一个点询问以该点为起点,初始至少需要多少个硬币能无限游走。无解输出 \(-1\)。

\(r_i,p_i≥0 ,n<=2e5,m<=2e5\)

题解:

考虑先搞掉 \(-1\) ,出度为 \(0\) 的点显然无解,所以可以跑一个类似于拓扑排序的东西。

记 \(ans_i\) 为点 \(i\) 的答案,那么答案有这样两种来源:

\(r_i \rightarrow ans_x\)

\(max(ans_x-p_i,r_i) \rightarrow ans_y\)

第一种来源是一条边限制一个点经过它,对于第二种来源,我们建的是反图,若存在一条 \(x\) 到 \(y\) 的边,那么 \(y\) 是可以选择走到 \(x\) 去的,这一条边和 \(x\) 的答案都会限制它。

不难发现这两种转移都是有大到小转移,所以可以按边的 \(r_i\) 排序计算。具体实现上来说,从大到小枚举边(建的边是反边,这很重要),把它的起点转移了(第一种转移),加入队列里面。对于队列里的每一个点,删除连出去的每一条边,顺便用这些边更新别的点,把他们加入队列。

总结:

之前竟然写过原题,好像是贺的,纯小丑。

期望得分:\(15\) ,实际得分:\(40\)。

C.欧提努斯

题意:

欧提努斯有 \(n\) 块积木,第 \(i\) 块的长度为 \(1,\)高度为 \(h_i\)(可以看做在二维平面,于是不考虑宽度)。

欧提努斯可以将这些积木以任意顺序排列,形成一个容器,接着往这个容器中装入尽可能多的水。

欧提努斯想知道,在所有可能的排列方案中,所有能装入的水量分别是多少。

\(2≤n≤2000,1≤hi≤50\)。

题解:

同样考场上没怎么想,但感觉这题是很好的 dp 题。 题目明示我们找到最大值,然后发现题目问的是能凑出多少,这引导我们去推或者猜一些结论和性质。而我们找出最大值,再将两边归并排序,这样就能保证对于每种可能的结果都能构造一种方案使得最大值在结尾,这样会好做很多。 接下来我们可以进行 dp。直接做 01dp 是不好做的,我们发现我们可以排序再做。 我们从小到大考虑,当前这个数如果存在有别的前缀最大值,那么我们需要将它放到一个集合,然后这个数还可以做别的数的前缀最大值。

所以我们设 \(f_{i,j,k}\) 表示考虑到第 \(i\) 个数,集合中有 \(j\) 个数,能否凑出 \(k\) 的 01 状态,转移是显然的,\(f_{i,j,k}\rightarrow f_{i+1,j+1,k}\),和 \(f_{i,j,k}\rightarrow f_{i+1,j-t,h_{i+1}\times(t+1)}\)。 为什么是 \(t+1\) 呢?因为我们 \(h_{i+1}\) 也会被放入集合中,然而如果 \(t=0\) 是毫无意义的。

然后观察这个过程,发现当前的时间瓶颈在第二个转移,然后我们注意到这正是背包形式的转移,对于 \(f_{i,j}\),我们可以从集合中掏出一个数交给 \(h_{i+1}\) ,就能转移到 \(f_{i,j-1}\)。这样子大大减少了转移次数,但发现仍然通过不了这道题。 现在两种转移是同级的,我们首先发现 \(h\) 范围很小,然而对于相同的 \(h_i\),我们发现只有最后一个是有效的转移,为什么?

我们考虑对于一个状态,我们假设 \(h_i\) 是最后一个,那么 \(h_{i}\) 的转移显然会包含 \(h_{i-1}\) 的转移,然后我们第二个转移又得到了优化。再看第一个转移,注意到 \(i,j\) 的相对位置不变,我们可以改变状态意义解决!我们开始是 \(|S|=j\),而现在我们将 \(j\) 改为 \(i-|S|\),那么我们发现我们不需要理会第一个转移了。 这个转移也有有趣的地方,我开始使用的是在最后处整体转移,而后面我发现大家的代码都是用前面的存在的数与当前数转移,本质上都是一样的。

总结:

直接写了暴力,没想到 \(bitset\) ,气死了。

期望得分:\(20\) ,实际得分:\(20\)。

D.食蜂操祈

哎呀不会

总结:

期望得分:\(10\) ,实际得分:\(10\)。

标签:得分,OI,最大值,day3,转移,24noip,长度,times,我们
From: https://www.cnblogs.com/wangwenhan/p/18415733

相关文章

  • P2602 [ZJOI2010] 数字计数 题解
    数位dp的板子题?显然\([a,b]\)等价于\([0,b]-[0,a]\)。考虑\(dp_{i,j}\)表示到第\(i\)位数字\(j\)的答案。先不考虑数字大小限制(即1到999之类),则显然有\(dp_{i,j}=dp_{i-1,j}\times10+10^{i-1}。当前数字是0时则减去10^{i-1},再减去1。\)所以我们可以预处理出\(dp\),来表示后面......
  • 【题解】【动态规划】—— [NOIP2006 普及组] 开心的金明
    【题解】【动态规划】——[NOIP2006普及组]开心的金明[NOIP2006普及组]开心的金明题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码2.1.二维d......
  • 【题解】【模拟】—— [NOIP2008 普及组] ISBN 号码
    【题解】【模拟】——[NOIP2008普及组]ISBN号码[NOIP2008普及组]ISBN号码题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2008普及组]ISBN号码通往洛谷的传送门题目描述每一本正式出版的图书都有一个I......
  • 【题解】—— [NOIP2011 普及组] 数字反转
    【题解】——[NOIP2011普及组]数字反转[NOIP2011普及组]数字反转题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2011普及组]数字反转通往洛谷的传送门题目描述给定一个整数......
  • 【题解】【数组】—— [NOIP2005 普及组] 校门外的树
    【题解】【数组】——[NOIP2005普及组]校门外的树[NOIP2005普及组]校门外的树题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码[NOIP2005普及组]校门外的树通往洛谷的传送门题目描述某校大门外长度为......
  • Android中的单例模式
    在Android开发中,单例模式(SingletonPattern)是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式在需要控制资源访问、管理共享资源或配置信息的场景下特别有用。在Android中,实现单例模式的方法有多种,但主要思想是一致的:私有化构造函数,......
  • Android SDK和NDK的区别
    AndroidSDK(SoftwareDevelopmentKit,软件开发工具包)和NDK(NativeDevelopmentKit,本地开发工具包)在Android应用开发中扮演着不同的角色,它们各自具有独特的功能和优势。一、定义与功能AndroidSDKAndroidSDK是由Google提供的一套开发工具,用于开发基于Android操作系统的应用......
  • Android中如何处理运行时权限?
    在Android中,处理运行时权限是开发过程中一个至关重要的环节,它自Android6.0(API级别23)引入,旨在提高用户隐私保护和应用的透明度。以下将详细阐述Android中处理运行时权限的方法、步骤、注意事项以及相关的最佳实践。一、运行时权限概述Android运行时权限(RuntimePermissions)允......
  • Android中的Intent的作用
    在深入探讨Android中的Intent及其作用之前,我们首先需要理解Android作为一个开源的移动操作系统,其核心设计哲学之一是鼓励组件之间的解耦与重用。这种设计使得开发者能够构建出灵活、可扩展且模块化的应用程序。而Intent,正是这一设计理念中至关重要的一环,它充当了不同组件之间通......
  • Android中的Context
    Android中的Context是一个核心概念,它代表了应用程序的运行环境和上下文信息。Context在Android开发中扮演着至关重要的角色,为应用程序提供了访问系统资源、启动组件、发送广播、获取系统服务等能力。下面,我将从Context的定义、种类、作用、实例化方式以及使用注意事项等方面,对A......