首页 > 其他分享 >小欧吃苹果-OPPO 2024届校招正式批笔试题-数据开发(C卷)

小欧吃苹果-OPPO 2024届校招正式批笔试题-数据开发(C卷)

时间:2024-07-20 10:59:23浏览次数:8  
标签:100005 题目 小欧 拓扑 2024 push 排序 届校 贪心

在处理这个问题前,先看一个经典的贪心算法题目。信息学奥赛一本通(C++版)在线评测系统icon-default.png?t=N7T8http://ybt.ssoier.cn:8088/problem_show.php?pid=1320

注意移动纸牌的贪心策略并不是题目中给出的移动次序:第1堆纸牌9<10,因为是最左侧,它只能从第2堆移动过来一张,这个动作是必须做的(没有别的选择),移动1次。第2堆现在7张,只能从第3堆移动过来3张,移动2次。第3堆14张,只能往第4堆移动4张,移动3次。第四堆恰好10张,不移动。此类问题算法从边界节点处理(当然也可以从第n堆开始逆向处理),因为边界只有唯一的移动选择。

题目分析:回到本题目,树中每个节点都有苹果数量的要求,在贪心算法处理过程中,只需先处理哪些只有唯一处理方案的节点,采用类似拓扑排序的方法即可求解。如题目中样例。

拓扑排序针对是有向无环图度为0的点,无向图如何拓扑排序呢?从上图观察可以发现无向图中边缘点度为1。因此将拓扑排序处理节点判定条件从度为0改为度为1即可。

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n,a[100005],v[100005],d[100005],ans=0;
vector<int>e[100055];
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int i,j,x,y;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<n;i++)/**< 无向图存储 */
    {
        cin>>x>>y;
        e[x].push_back(y);
        e[y].push_back(x);
        d[x]++,d[y]++;/**< 统计度 */
    }
    queue<int>q;
    for(i=1;i<=n;i++)
        if(d[i]==1) q.push(i);
    while(q.size())
    {
        x=q.front();
        v[x]=1;/**< 标记为已处理节点 */
        q.pop();
        for(i=0;i<e[x].size();i++)/**< x所有邻接点,树结构实际只有一个点可以起作用 */
        {
            y=e[x][i];
            if(v[y]==0)/**< 只能和没有处理过节点交换苹果 */
            {
                ans+=abs(x-a[x]);/**< x节点将自己的值处理为x,花费代价是abs(x-a[x]) */
                if(x>=a[x])  /**< x上多出的值或者缺少的值只能传递给y */
                    a[y]-=x-a[x];
                else
                    a[y]+=a[x]-x;
                d[y]--;/**< y的度减一 */
                if(d[y]==1)
                    q.push(y);
            }
        }
    }
    cout<<ans;
    return 0;
}

标签:100005,题目,小欧,拓扑,2024,push,排序,届校,贪心
From: https://blog.csdn.net/sigd/article/details/140457280

相关文章

  • [lnsyoj110/luoguP2024]食物链
    题意原题链接三类元素\(a,b,c\)满足\(a\tob\),\(b\toc\),\(c\toa\)。现在共有\(n\)个元素,给出\(m\)条关系\(x\toy\)或\(x\)与\(y\)种类相同,输出非法或与前面所属关系相矛盾的关系数量sol并查集可以处理“朋友的朋友是朋友”这样的传递关系,却不能处理“敌人......
  • 大一升大二暑假 NJU暑期课程 Linux系统基础(1) 20240720
    一.操作系统操作系统OperatingSystem简称OS,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序。Q1:什么是文件......
  • 2024/07/19(暑假学习hadoop第二周总结)
    本周的学习任务主要是完成Hadoop中有关的组件的配置。有关于此配置的过程严格按照黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目全套一网打尽_哔哩哔哩_bilibili来进行配置。首先就是HDFS的配置,这是Hadoop分布式文件系统,用于在多个服务器上构建存储......
  • 河南萌新联赛2024第(一)场
    先给出比赛链接:https://ac.nowcoder.com/acm/contest/86639A造数题目问多少次操作可以把0转为n操作共有三种\(+1\)\(+2\)\(\times2\)能够发现操作的数字最大是2,那么这题就可以考虑二进制。三种操作就能这么理解:\(末位+1\)\(倒数第二位+1\)\(左移1位\)那么我们就......
  • 干货 | 2024应用安全防护之云原生安全实践方案(免费下载)
    诚挚邀请您扫码加入以下信息安全精品资料知识星球,获取上万份安全PPT解决方案!!!感谢支持!!!......
  • 航电多校 2024 笔记
    01写点赛时不会的。难绷场,可能因为是01所以比较水,就只有最后一个能放省选模拟T1,以及一堆原神题。T5hdu7434博弈小马给出了一个可重小写字符集合 \(S\)。Alice初始时有空串 \(A\),Bob初始时有空串 \(B\)。两人轮流等概率取出集合 \(S\) 中的一个字符 \(c\),将它拼接......
  • 初级java每日一道面试题-2024年7月19日
    在Java中,重载(Overloading)和重写(Overriding)是面向对象编程中多态性的两个重要概念。1.重载(Overloading)定义:重载是指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。也就是说,这些方法的名称相同,但参数的个数、类型或顺序至少有一个不同。目的:重载......
  • 循环位移(2024“钉耙编程”中国大学生算法设计超级联赛(1))
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();constintN=4e6+7;constintP=131;ullp[N],an[N],bn[N];intn;voidinit(stringa,stringb){......
  • 最新2024视频剪辑Adobe全家桶AE,PR,PS软件等
    前言Adobe致力于为全球客户提供高品质、高性能的数字内容及相关服务,Adobe拥有卓越的产品、解决方案、服务和专业知识,帮助客户创造出与众不同、充满创意的产品和内容。Adobe拥有全球领先的数字化软件解决方案和行业知识产权(IP),为数字时代提供最具创新性、最高效的数字化创作工......
  • SMU Summer 2024 Contest Round 5
    SMUSummer2024ContestRound5RobotTakahashi思路按照Wi......