【THUPC 2024 初赛】 转化

我都能做出来,那就是大水题了。

思路

首先我们要确定最大可以变色的球的数量 \(tot\)。

有如下两个贪心步骤:

    1. 所有颜色使用分裂操作,并更新 \(a_i\)。

​ 此时的有 \(tot=\sum_{i=1}^n \min(a_i,b_i)\)(需要更新 \(a_i,b_i\))。

    1. 若 \(tot\) 大于 \(0\),给 \(b_i\) 和 \(c_i\) 不为 \(0\) 的点,分配一个球,执行完分裂 \(c_i\) 次后,更新 \(a_i,b_i\),更新 \(tot\)。

这两个贪心步骤可以保证 \(tot\) 最大。

对于 1 如果一个点有球,那么从别处变色球来分裂肯定不优;对于 2,不难发现,执行完后 \(tot\) 肯定不降。

对于每一个颜色 \(i\),如果此时 \(tot\) 大于 \(0\) 且 \(c_i\) 大于 \(0\),那么 \(ans_i=tot+a_i+c_i\)。

如果 \(tot\) 等于 \(0\),那么 \(ans_i=a_i\)。

对于全局最大值,在执行完上述操作中的 \(c_i\),选择大于 \(0\) 且最大的 \(tot\) 个,设这些 \(c_i\) 的和为 \(sum\)。

全局最大答案为:\(ans=\sum\limits_{i=1}^n a_i+sum+tot\)。

时间复杂度 \(O(n)\)。

CODE

#include<bits/stdc++.h>
using namespace std; const int maxn=5e5+5; #define int long long
#define ll long long struct node
{
int c,id;
}edge[maxn]; ll n,fs,ct;
ll a[maxn],b[maxn],c[maxn]; bool cmp(ll a,ll b){return a>b;} signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
for(int i=1;i<=n;i++) scanf("%lld",&c[i]);
for(int i=1;i<=n;i++)
{
if(a[i]==0) continue;
a[i]+=c[i];
c[i]=0;
ll t=min(a[i],b[i]);
fs+=t;
b[i]-=t;
a[i]-=t;
}
for(int i=1;i<=n;i++)
{
if(b[i]&&c[i]&&fs)
{
fs--;
a[i]=1+c[i];
c[i]=0;
ll t=min(b[i],a[i]);
b[i]-=t;
a[i]-=t;
fs+=t;
}
} ll totans=0;
for(int i=1;i<=n;i++)
{
totans+=a[i];
ll t=fs+a[i];
if(t) t+=c[i];
printf("%lld ",t);
}
sort(c+1,c+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(c[i]&&fs)
{
fs--;
totans+=1+c[i];
}
} printf("\n%lld",totans+fs);
}

赛时代码比较艹,所以读者自己写一次的好。

【THUPC 2024 初赛】 E 转化的更多相关文章

  1. 2016"百度之星" - 初赛(Astar Round2A)--HDU 5690 |数学转化+快速幂

    Sample Input 3 1 3 5 2 1 3 5 1 3 5 99 69   Sample Output Case #1: No Case #2: Yes Case #3: Yes Hint ...

  2. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  3. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  4. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  5. NOIP2018提高组初赛知识点

     (传说,在神秘的初赛中,选手们经常互相爆零以示友好……) 历年真题:ti.luogu.com.cn 以下标题中打*的是我认为的重点内容 一.关于计算机 (一)计算机组成 硬件组成: 1. 控制器(C ...

  6. 百度之星2017初赛A-1005-今夕何夕

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. HDU 6122 今夕何夕 【数学公式】 (2017"百度之星"程序设计大赛 - 初赛(A))

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. thupc & cts & apio & thusc 游记 (北京17日游记)

    thupc & cts & apio & thusc 游记 (北京17日游记) Day 0 和隔壁校两人py了一下,六个人组了两队,(左哼哼)与(右哼哼),我和Camoufla ...

  9. 史上最全NOIP初赛知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  10. 初赛Part2

    初赛 时间复杂度 主定理(必考) \[ T(n) = aT(\frac{n}{b})+f(n) \] 其中,\(n\)为问题的规模,\(a\)为递推下子问题的数量,\(\frac{n}{b}\)为每个 ...

随机推荐

  1. C#项目—彩票选号

    C#彩票选号软件 今天做了一个彩票选号的小软件,将学到的知识点总结如下(新手小白,多提意见): 1.写程序的思路 实体类(属性.方法) No1. 随机数组集合(属性) No2. 创建集合对象(构造方法 ...

  2. Python 串口

    ref: https://www.cnblogs.com/zhicungaoyuan-mingzhi/p/12303229.html

  3. Java 1.8 Stream流原理与用法总结

    一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...

  4. c程序设计语言 by K&R(二)指针与数组

    指针与数组 1. c语言只有值传递,没有引用传递 可通过指针交换 #include <stdio.h> #include <stdlib.h> void swap(int* a ...

  5. EF Core – JSON Column

    前言 SQL Server 支持 JSON, 以前写过一篇介绍 SQL Server – Work with JSON. 但 EF Core 一直没有支持. 直到 EF Core 7.0 才支持. 参 ...

  6. OData – OData vs GraphQL

    GraphQL 很火, 很厉害, 但是它和 OData 有本质的区别. 所以并不是说任何一样对比另一个绝对的好. GraphQL is not OData twitter 的讨论 有几个点是我能 Ge ...

  7. Figma 学习笔记 – Constraints 约束

    用途 Constraints 用于 responsive design, 子元素和父元素建立约束关系后, 当父元素 dimension 变换的时候, 子元素会做出相应的变化 (移动位置或 resize ...

  8. CSP提高组模拟1

    我的微軟輸入法莫名其妙變成繁體了,你們有什麽頭緒嗎 狀態 題目 20 Time Exceeded A 最短路 25 Time Exceeded B 方格取数 0 Time Exceeded C 数组 ...

  9. HuggingChat macOS 版现已发布

    Hugging Face 的开源聊天应用程序 Hugging Chat,现已推出适用于 macOS 的版本. 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户 ...

  10. 模板声明的两种形式:template<int N> 和 template<N>

    template<int N>:非类型模板参数 template<int N> 是一个典型的非类型模板参数的例子.这里的 N 是模板的参数,但它不是一个类型,而是一个具体的整数 ...