Roma and Poker

news/2024/11/13 15:00:32/文章来源:https://www.cnblogs.com/YzaCsp/p/18538307

算法

因为这题是从差分约束专题来的, 所以肯定要朝着化为不等式的方向化简

\(TimeW_i, TimeD_i, TimeL_i\) 表示原串前 \(i\) 位中 \(W, D, L\) 的个数
\(W_i, D_i, L_i\) 表示最后结果中前 \(i\)\(W, D, L\) 的个数
根据原串有

\[\left\{ \begin{array}{lr} W_i \geq TimeW_i, & \\ D_i \geq TimeD_i, & \\ L_i \geq TimeL_i, & \\W_i + D_i + L_i = i \end{array} \right. \]

根据题目约束条件有

\[\left\{ \begin{array}{lr} \mid W_n - L_n \mid = k, & \\ \mid W_i - L_i \mid < k \left[i \in [1, n) \right]\end{array} \right. \]

仅仅化成这样是不可做的
直觉上感觉可以挨个枚举, 这是符合人类本能的(
考虑 $ W_i + D_i + L_i = i $ , 从 \(n\)\(1\) 枚举 \(i\) , 每一次 \(W_i + D_i + L_i\) 的变化量能且仅能为 \(1\)
假设每一次选择减少的序列为 \(S\)
则有:
对于约束条件
\(u = \max(W_n, L_n), v = \min(W_n, L_n)\) 对应的字符
\(S\)\(v\) 可在一定区间内滑动, 以保证 \(\mid W_i - L_i \mid < k\)
\(dis1_i\) 表示 \(u\)\(i\) 处的变化量, \(dis2_i\) 表示 \(v\)\(i\) 处的变化量的相反数, 有 \(dis1_i, -dis2_i \in \{ 0, 1 \}\), \(dis1_i - dis2_i \in \{ 0, 1 \}\)

枚举 \(W_n\) , 得到 \(L_n, D_n\)
关于原串中的约束和题目中的约束, 用 \(\sum^{i = 1}_{j} dis1_i, \sum^{i = 1}_{j} dis2_i, L_n, D_n, W_n\) 显然可以表示, 不加赘述

\(dis\) 表示 \(dis1, dis2\) 的倒序前缀和
则有
pA6HILn.png

代码

后补

总结

这种三种 / 两种填充方式的图 (本题中的 \(D\) 并没有什么卵用), 考虑记为 \(1, 0, -1\) 处理
呜呜呜, 他为什么这么聪明

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cocos Creator 如何调试代码?

一、方式调试代码两种方式: 在VS code中调试在浏览器中调试二、调试一:VS Code中Chrome浏览器 打开VS Code中的插件下载Debugger for Chrome/JavaScript Debugger 打开Cocos Creator点击菜单中的开发者选项 选择Visual Studio Code 工作流 -> 添加Chrome debug配置,此时VS…

旋转矢量合成,两个圆圈

import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Circle, FancyArrowPatch from matplotlib.animation import FuncAnimation# 创建一个新图和两个坐标轴 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))# 设置坐标轴的等比例,确…

华三配置mstp

S1配置 stp mode mstp stp region-configuration region-name a revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration qu stp instance 1 root primary stp instance 2 root secondary stp global enable === S2配置 stp region-configuratio…

2024-2025-1 20241411 《计算机基础与程序设计》第七周学习总结

作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标 数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数作业正文…

并查集+最小生成树 学习笔记

图论系列: 前言: 咲いた野の花よ ああどうか教えておくれ 人は何故傷つけあって 争うのでしょう 相关题单: 题单1 题单2 题单3 题单4 一.并查集 1.基础定义与操作 (1)定义 并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节…

三相电合成旋转矢量-动态图

import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Circle, FancyArrowPatch from matplotlib.animation import FuncAnimation# 创建一个新图和两个坐标轴 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))# 设置坐标轴的等比例,确…

接雨水

using namespace std; //锻炼思维的题目。 int main(){ int t;cin>>t;while(t--){long long int n; // 使用 long long int 来处理可能的大数cin>>n;vector<long long int> a(n), l(n), r(n); // 同样,数组元素也应该是 long long intlong long int …

第 2 篇 Scrum 冲刺博客

作业要求这个作业属于哪个课程 计科34班这个作业的要求在哪里 团队作业4——项目冲刺这个作业的目标 1.站立式会议2.发布项目燃尽图3.每人的代码/文档签入记录4.适当的项目程序/模块的最新(运行)截图5.每日每人总结会议照片昨日已完成的工作/今天计划完成的工作成员 昨天已完…

Nuxt.js 应用中的 schema:extend事件钩子详解

title: Nuxt.js 应用中的 schema:extend事件钩子详解 date: 2024/11/10 updated: 2024/11/10 author: cmdragon excerpt: schema:extend 钩子使开发者能够扩展默认数据模式,为特定业务需求添加自定义字段和验证。 categories:前端开发tags:Nuxt 钩子 数据 扩展 自定义 验证…

nowcoder

Bin 3 1 1 2 2 2 1 40 1 6 5 3 4out 1 -37 3

实验3 类与对象

实验任务1: botton.hpp代码:1 #pragma once2 3 #include <iostream>4 #include <string>5 6 using std::string;7 using std::cout;8 9 // 按钮类 10 class Button { 11 public: 12 Button(const string &text); 13 string get_label() const; 14 …

2294: 【例29.3】 求小数的某一位

include <bits/stdc++.h> using namespace std; int n, m; long long sum=1, k; int main( ) { cin >> n >> m >> k; for (int i=1;i<=k;i++) { n*=10; sum=n/m; n%=m; } cout << sum<<endl; return 0; } 反思:这个代码我整体是错在把…