当前位置: 首页 > news >正文

ABC450G 题解

本做法为随机化做法,思路是这篇题解

题目链接

记选的 \(6\) 个题目为 \(k_{1/2/3/4/5/6}\)

首先我们将题目类型随机赋值为 \(0/1/2/3\),显然原来不合法的方案在随机赋值之后仍然不合法,而实际上的最优解在现在仍然合法的概率为 $\frac{3}{256} $。

证明:

  • \(k_3\)\(k_4\) 不相同的概率为 \(\frac{3}{4}\),因为 \(k_3\) 可以随便取,之后 \(k_4\) 的值只能在 \(0/1/2/3\) 中挑除了 \(k_3\) 以外剩下的 \(3\) 个。

  • 固定 \(k_3\)\(k_4\) 之后,\(k_{1/2/3/4}\) 互不相同的概率为 \(\frac{1}{4} \times \frac{2}{4}=\frac{1}{8}\),因为 \(k_1\) 可以挑 \(4\) 个中的 \(2\) 个,\(k_2\) 只能挑 \(4\) 个中的 \(1\) 个。

  • 同理 \(k_{3/4/5/6}\) 互不相同的概率也为 \(\frac{1}{8}\)。总概率为 \(\frac{3}{4} \times \frac{1}{8}\times \frac{1}{8}=\frac{3}{256}\)

这样我们就将题目类型数缩减到了 \(4\)。设随机赋值后新的题目类型为 \(g_i\)

接下来我们维护以下信息

\[pre_{i,j}= \max\limits_{1\le k \le i \bigwedge g_k=j}a_k \]

\[suf_{i,j}= \max\limits_{i\le k \le n \bigwedge g_k=j}a_k \]

\[s_{i,j} = a_i+\sum_{k\in \left \{ 0,1,2,3 \right \} \bigwedge k \ne g_i \bigwedge k \ne j}suf_{i+1,k} \]

\[t_{i,j,k} = \max\limits_{i \le sufi \le n \bigwedge g_{sufi} = j} s_{sufi,k} \]

我们枚举第三个题目的位置 \(i\),与第四个题目的类型 \(j\)

那么此时的答案为

\[a_i + t_{i+1,j,g_i} + \sum_{k\in \left \{ 0,1,2,3 \right \} \bigwedge k \ne g_i \bigwedge k \ne j} pre_{i-1,k} \]

这样我们以 \(O(n)\) 的时间复杂度解决了问题。

接着我们随机赋值 \(600\) 次,那么错误率为 \((1-\frac{3}{256})^{600} \approx 8 \times 10^{-4}\)。可以接受。

实测 \(T = 300\) 时 WA 两个点, \(T = 500\) 时可以通过。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<ctime>
#include<random>
#define mp make_pair
#define fo(i , x , y) for(int i = x ; i <= y ; i++)
#define go(i , x , y) for(int i = x ; i >= y ; i--)
using namespace std;
mt19937 rd(time(0));
const int maxn = 100000;
const long long inf = 100000000000;
int n , k[maxn + 5];
long long a[maxn + 5] , f[maxn + 5] , g[maxn + 5];
long long pre[maxn + 5][4] , suf[maxn + 5][4] , s[maxn + 5][4] , t[maxn + 5][4][4];
long long solve(){fo(i , 1 , n) f[i] = rand() % 4;fo(i , 1 , n) g[i] = f[k[i]];//--------------------fo(j , 0 , 3) pre[0][j] = -inf;fo(i , 1 , n){fo(j , 0 , 3){pre[i][j] = pre[i - 1][j];if(g[i] == j) pre[i][j] = max(pre[i][j] , a[i]);}}//--------------------fo(j , 0 , 3) suf[n + 1][j] = -inf;go(i , n , 1){fo(j , 0 , 3){suf[i][j] = suf[i + 1][j];if(g[i] == j) suf[i][j] = max(suf[i][j] , a[i]);}}//--------------------fo(i , 1 , n){fo(j , 0 , 3){s[i][j] = a[i];fo(k , 0 , 3){if(k == j or k == g[i]) continue;s[i][j] += suf[i + 1][k];}}}//--------------------fo(j , 0 , 3)fo(k , 0 , 3)t[n + 1][j][k] = -inf;go(i , n , 1){fo(j , 0 , 3)fo(k , 0 , 3) t[i][j][k] = t[i + 1][j][k];int j = g[i];fo(k , 0 , 3)t[i][j][k] = max(t[i][j][k] , s[i][k]);}//--------------------long long ans = -inf;fo(i , 3 , n - 3){fo(j , 0 , 3){if(g[i] == j) continue;long long cur = t[i + 1][j][g[i]] + a[i];fo(k , 0 , 3){if(k == g[i] or k == j) continue;cur += pre[i - 1][k];}ans = max(ans , cur);}}return ans;
}
int main(){// ios :: sync_with_stdio(0) , cin.tie(0) , cout.tie(0);// freopen(".in" , "r" , stdin);// freopen(".out" , "w" , stdout);cin >> n;fo(i , 1 , n) cin >> k[i] >> a[i];long long ans = -inf;ans = solve();fo(i , 1 , 300) ans = max(ans , solve());if(ans < 0) cout << "-1\n";else cout << ans << "\n";
}
http://www.jsqmd.com/news/549844/

相关文章:

  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---(6)---HITL(Human In The Loop)
  • # 3.20Web
  • 威联通NAS结合阿里云实现安全远程访问:域名与SSL证书全流程配置
  • 2026年双链/链条式/矿用刮板机厂家推荐:山东中煤工矿物资集团,输送设备专业之选 - 品牌推荐官
  • S2-Pro多轮对话效果实录:复杂任务规划与分解案例
  • 列表(web)
  • FreeSWITCH外线对接避坑指南:IAD网关配置中5个必改的安全参数
  • Wan2.2-I2V-A14B镜像部署教程:无需conda/pip,纯脚本一键启动
  • 单细胞数据质控避坑指南:如何避免常见错误并优化分析结果
  • 探讨惠州有实力养老院口碑,价格排名情况如何? - 工业品网
  • VS Code 高效开发环境搭建全攻略
  • 别再傻傻分不清了!AUTOSAR里那三种接口到底怎么用?
  • 构建多智能体系统:EVA-02作为文本处理核心Agent
  • 宏洛图为ANDREA IERVOLINO打造高端包装设计 核心理念解析 - 宏洛图品牌设计
  • 19. 删除链表的倒数第 N 个结点
  • Zynq7000开发实战:PS端GPIO初始化函数XGpioPs_LookupConfig()和XGpioPs_CfgInitialize()避坑指南
  • mrm-mot2x50电机驱动CAN通信库详解
  • 给硬件工程师的避坑指南:从AEC-Q100到ISO 16750,你的车规产品认证路线图
  • Mac Mouse Fix 深度技术解析:从系统事件拦截到手势映射的实现原理
  • 2026年频闪测试仪品牌推荐:北京先锋泰坦科技光谱亮度计/薄膜厚度测量仪等18类仪器全解析 - 品牌推荐官
  • 智能客服监控系统:构建AI值守的可靠性基石
  • windows+ubuntu 双系统(or三系统)
  • 非专业的力量:岐金兰与AI元人文的生成之路——人机协作时代的思想范式革命
  • C语言督学营课后习题OJ题解:手把手教你如何高效刷题
  • 从通达OA到域控提权:vulntarget-a靶场完整渗透路线复盘
  • 如何高效批量下载无水印抖音视频:TikTokDownload终极解决方案
  • STM32 Bootloader开发避坑指南:从Flash分区到APP跳转的五个常见问题
  • NoFences:开源工具打造高效管理的Windows桌面智能分区系统
  • 从零到一:在Mac上搭建Podman开发环境全攻略
  • 构造