分糖果(candy)

2023-12-05 02:18
文章标签 糖果 candy

本文主要是介绍分糖果(candy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每个小朋友从接受糖果到吃完糖果需要m秒的时间。那么,如果第一秒C小朋友开始发糖,第多少秒所有小朋友都吃完了糖呢?

输入格式

第一行为三个数n、p、c,为小朋友数、关系数和C小朋友的编号。

第二行为一个数m,表示小朋友吃糖的时间。

下面p行每行两个整数,表示某两个小朋友在彼此身旁。

输出格式

一个数,为所有小朋友都吃完了糖的时间。

输入样例

4 1 3

2

1 2

2 3

1 4

输出样例

5

提示说明

【样例解释】

第一秒,糖在1手上。第二秒,糖传到了2、3的手中。第三秒,糖传到了4的手中,此时1吃完了。第四秒,2、3吃完了。第五秒,4吃完了。所以答案是5。

【限制】

40%的数据满足:1<=n<=100

60%的数据满足:1<=n<=1000

100%的数据满足:1<=n<=100000

m<=n*(n-1)/2,不会有同一个关系被描述多次的情况。


//代码AC通过(^_^)(^ ~ ^)

题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1380


#include <bits/stdc++.h>using namespace std;int n, p, c, m, size;
int h = 0, t = 1;
int q[100001][2];
bool flag[100001];struct eagle{int next, to;
}candy[2000001];int head[100001];inline int read(){int f = 1, x = 0;char s = getchar();while(s < '0' || s > '9'){if(s == '-'){f =-f;s = getchar();}}while(s >= '0' && s <= '9'){x = x * 10 + s - '0';s = getchar();}return x * f;
}void add(int from, int to){candy[++size].next = head[from];candy[size].to = to;head[from] = size;
}void bfs(){q[1][0] = c;q[1][1] = 1;flag[c] = true;while(t > h){h++;for(int i = head[q[h][0]]; i; i = candy[i].next){if(!flag[candy[i].to]){q[++t][0] = candy[i].to;q[t][1] = q[h][1] + 1;flag[candy[i].to] = true;}}}
}int main(){n = read();p = read();c = read();m = read();for(int i = 1; i <= p; i++){int a = read(), b = read();add(a, b);add(b, a);}bfs();printf("%d\n", q[t][1] + m);return 0;
}

这篇关于分糖果(candy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455771

相关文章

【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

CF C. Candy Store

原题链接:Problem - C - Codeforces 题意:多测,先给出n代表n种糖果,每种糖果分别给出数量和单价,可以将糖果平均分成若干袋,每一袋的的价格是一袋糖果数量×单价,对于每一种糖果都求出一袋的价格,对于每种糖果都需要用标签贴出一袋的价格,但是如果相邻的糖果价格相同,那么就可以用一个标签来代表价格,问最少使用几个标签。 思路:如果一段糖果价格是一样的,那么设置价格为cost。因

力扣135-分发糖果(java详细题解)

题目链接:135. 分发糖果 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。 题目思路: 本题主要就是难在,有俩个维度,当前的孩子不仅要跟左边比,还要跟右边比。 可能我们一开始就想遍历孩子,让当前孩子先跟左边

【NO.15】LeetCode经典150题-135. 分发糖果

文章目录 【NO.15】LeetCode经典150题-135. 分发糖果解题:贪心 【NO.15】LeetCode经典150题-135. 分发糖果 135. 分发糖果 【困难】 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。

代码随想录算法训练营第二十九天| 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列

134. 加油站 题目: 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证

贪心算法---分发糖果

题目: n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。 思路:使用两次贪心思想。 第一次从左到右遍历,只比较右边大于左边的情况,如果ratings[i]>ratings[i-1

POJ 3083Children of the Candy Corn(DFS*2+BFS)

题目地址:http://poj.org/problem?id=3083 这道题整体思路并不难,但一些细节方面有点难想。。主要是容易写的太麻烦,太乱。。虽然我的代码也比较长,但是思路还是挺清晰的(基本就是把上一段的复制下来稍微改改。。)。但是有些细节方面一开始想错了,导致调试了很长时间。主要思路是记录4个方向然后改变方向走。 题目意思是输出往左绕的步数与往右绕的步数,还有最短步数。前两个用DFS

codeforces #436 A Feed with Candy(贪心)

题目地址:http://codeforces.com/contest/436/problem/A 自己笨的要死。。。WA了好多次,还是看题解才明白了。。。一直在纠结该先选0好还是先选1好,但是就是没想到可以枚举这两种情况都试一试。。。 分别枚举这两种情况,然后每次选的时候从另一种糖果里从可以够到的糖果里选出m最大的那个,贪心就可以了。 代码如下: #include <iostream>

九度OJ-1122:吃糖果

就是:N阶楼梯上楼问题。

代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

134. 加油站 题目链接:134. 加油站 文档讲解:代码随想录 状态:so easy 思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将下一个加油站设为新的起点,并重置当前油量差(currTank)。最后检查总的油量差(totalTank),如果总的油量差大于等于0,说明存在一个合法的起点,使汽车能绕完整个环形路;否则不存在