PAT 1079 Total Sales of Supply Chain

news2025/1/20 10:48:35

个人学习记录,代码难免不尽人意。
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier to customer.

Starting from one root supplier, everyone on the chain buys products from one’s supplier in a price P and sell or distribute them in a price that is r% higher than P. Only the retailers will face the customers. It is assumed that each member in the supply chain has exactly one supplier except the root supplier, and there is no supply cycle.

Now given a supply chain, you are supposed to tell the total sales from all the retailers.

Input Specification:
Each input file contains one test case. For each case, the first line contains three positive numbers: N (≤10 5), the total number of the members in the supply chain (and hence their ID’s are numbered from 0 to N−1, and the root supplier’s ID is 0); P, the unit price given by the root supplier; and r, the percentage rate of price increment for each distributor or retailer. Then N lines follow, each describes a distributor or retailer in the following format:K i ID[1] ID[2] … ID[K i ]where in the i-th line, K i is the total number of distributors or retailers who receive products from supplier i, and is then followed by the ID’s of these distributors or retailers. K jbeing 0 means that the j-th member is a retailer, then instead the total amount of the product will be given after K j. All the numbers in a line are separated by a space.

Output Specification:
For each test case, print in one line the total sales we can expect from all the retailers, accurate up to 1 decimal place. It is guaranteed that the number will not exceed 1010.

Sample Input:
10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3
Sample Output:
42.4

#include <cstdio>
#include<queue>
#include<string>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
  
struct node{
	int data;
	vector<int> child;
	double amount;
	int level;
}; 
node* Node[100010];
node* newnode(int data){
	node* root =new node;
	root->data=data;
	root->child.clear();
	root->amount=0;
	root->level=-1;
	return root;
}
void level(int root){
	queue<int> q;
	q.push(root);
	Node[root]->level=0;
	while(!q.empty()){
		int now=q.front();
		q.pop();
		if(!Node[now]->child.empty()){
			for(int i=0;i<Node[now]->child.size();i++){
				int a=Node[now]->child[i];
				q.push(a);
				Node[a]->level=Node[now]->level+1;
			}
		}
	}
}
int main(){
  int n;
  double p,r;

  scanf("%d%lf%lf",&n,&p,&r);
  for(int i=0;i<n;i++){
  	Node[i]=newnode(i);
  }
  for(int i=0;i<n;i++){
  	int type;
  	scanf("%d",&type);
  	if(type==0){
  		scanf("%lf",&Node[i]->amount);
	  }
	else{
		for(int j=0;j<type;j++){
			int a;scanf("%d",&a);
			Node[i]->child.push_back(a);
		}
	}
  }
  level(0);
  queue<node* > q;
  q.push(Node[0]);
  double sum=0;
  while(!q.empty()){
  	node* no=q.front();
  	q.pop();
  	if(!no->child.empty()){
  		for(int i=0;i<no->child.size();i++){
  				q.push(Node[no->child[i]]);
		  }
	  }
	else{

	    double rate=1+(r/100);
		sum+=p*pow(rate,no->level)*no->amount;

	}
  	
  }
  printf("%.1lf\n",sum);
}

这道题还是蛮简单的,就是我看到题目中说数据不超过1010,觉得肯定会有数据溢出的测试点,本想着看到错误再改代码的,结果直接通过了,也算是轻松吧!
后来查资料发现,double基本不会溢出,基本可以放心。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sleep以及如何正确终止线程

Thread.sleep()为什么要抛出中断异常或者放入try-catch中&#xff1f; 因为&#xff1a;在 sleep 的同时也要对外界情况有感知能力&#xff0c;也就是能够响应中断。比如在调用 interrupt() 的时候&#xff0c;其实就是想尽快地结束线程&#xff0c;所以&#xff0c;继续的 sl…

结构体指针变量的使用

1、结构体指针的引用 #include<iostream> using namespace std;struct Student {int num;char name[32]; }; int main() {struct Student stu {1,"张三"};struct Student* p &stu;system("pause"); return 0; } 2、通过结构体指针访问结构体…

使用Scanner接收用户输入

扫描输入的两种方式 Scanner主要提供了两个方法来扫描输入&#xff1a; &#xff08;1&#xff09;hasNextXxx()&#xff1a;是否还有下一个输入项&#xff0c;Xxx可以是Int&#xff0c;Long等代表基本数据类型的字符串。 如果只是判断是否包含下一个字符串&#xff0c;则直…

Spring Boot(六十四):SpringBoot集成Gzip压缩数据

1 实现思路 2 实现 2.1 创建springboot项目 2.2 编写一个接口,功能很简单就是传入一个Json对象并返回 package com.example.demo.controller;import com.example.demo.entity.Advertising; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springf…

Vue3 Axios网络请求简单应用

cd 到项目 安装Axios&#xff1a;cnpm install --save axios post传递参数 需要安装querystring 用于转换参数格式&#xff1a;cnpm install --save querystring 运行示例&#xff1a; 后台接口&#xff1a; GetTestData.java package com.csdnts.api;import java.io.IOExce…

Logic 2逻辑分析器捉到的CAN帧

代码开发环境 逻辑分析仪环境 MCU芯片环境&#xff1a;RH850/U2A16 逻辑分析器(LA)抓到的CAN帧 <完>

ChatGPT与Web3.0:让聊天变得更加有趣和安全

随着数字经济时代的到来&#xff0c;Web3.0应用成为了数字世界的重要组成部分&#xff0c;同时人工智能技术也为Web3.0应用的发展提供了强大的支持。其中&#xff0c;ChatGPT作为一种强大的人工智能技术&#xff0c;在Web3.0应用中发挥着越来越重要的作用。本文将从普通用户的角…

1022.从根到叶的二进制之和

目录 一、题目 二、代码 一、题目 二、代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nu…

CTFHub php://input

1.首先看代码&#xff1a; 这里其实就应该想到的是php://伪协议&#xff1a; php://filter、php://input、php://filter用于读取源码 php://input用于执行php代码 2.其次&#xff0c;判断使用php://input伪协议 而执行php://input伪协议条件是allow_url_include是On 可以先利用…

SAP MM学习笔记24-以评估收货(评价)和非评估收货(非评价)

SAP 中 有评价入库&#xff08;评估收货&#xff09;和非评价入库&#xff08;非评估收货&#xff09;两种入库方式。 一般来说在库品目会采用评价入库&#xff0c;而消费品目&#xff0c;会采用非评价入库。 其实评价入库&#xff0c;非评价入库对外都无所谓的&#xff0c;人…

企业安全体系架构分析:开发安全架构之综合架构

上一期讲述了安全架构的安全性架构。实际上一个综合架构的设计不可能只考虑或者过分的考虑安全性&#xff0c;业务架构与安全架构的综合分析才是一个综合架构应该考虑的事情。那么如何做到鱼与熊掌兼得&#xff1f; 这里涉及一个问题&#xff0c;业务架构应该是什么样子的&…

Redis——Redis.conf详解+Redis持久化(RDB和AOF)+Redis订阅发布

配置文件 redis启动时通过配置文件启动 原生配置文件全文在网上随便搜索一下就能找到了。 单位 配置文件 unit单位 对大小写不敏感 包含 类比import&#xff0c;将其他的配置文件引入 网络 bind 127.0.0.1 // 绑定ip protected-mode yes //是否受保护 po…

4K/8K 超高清实时处理与分发

// 4K/8K超高清时代的来临对于原有系统带来很多新的挑战&#xff0c;存储、带宽、算力成本的大幅增长也是阻碍超高清推广普及的重要原因。LiveVideoStackCon 2023上海站邀请到了腾讯云音视频的刘兆瑞分享在4K/8K超高清视频在实时编码的过程中遇到的困难以及解决方案。 文/刘兆…

构建高性能小程序:优化技巧和最佳实践

第一章&#xff1a;引言 随着移动互联网的快速发展&#xff0c;小程序成为了用户获取信息和进行业务交流的重要平台之一。然而&#xff0c;小程序由于受限于硬件资源和网络环境&#xff0c;开发者需要更加关注性能优化&#xff0c;以提供流畅、高效的用户体验。本文将介绍一些构…

H5前端外包开发框架排名

以下是一些常见的网页前端开发框架以及它们的排名和特点。请注意&#xff0c;随着时间的推移&#xff0c;框架的排名和特点可能会有所变化。不同的项目和团队对于框架的选择会受到多个因素的影响&#xff0c;包括开发团队的技能、项目的规模和要求、性能需求等。北京木奇移动技…

AE使用(一)

打开AE 点击“新建合成” 注意参数&#xff1a;宽度高度是视频是横屏还是竖屏。发布在抖音上&#xff0c;需要做出来竖屏效果&#xff1b;发布在视频网站中需要做出横屏效果。没用特殊需求&#xff0c;默认参数就行。 导入素材&#xff1a;左键双击“导入素材区”的空白部分。 …

将CNKI知网文献条目导出,并导入到Endnote内

将CNKI知网文献条目导出&#xff0c;并导入到Endnote内 目录 将CNKI知网文献条目导出&#xff0c;并导入到Endnote内一、从知网上导出参考文献二、将知网导出的参考文献导入到Endnote 一、从知网上导出参考文献 从知网上导出参考文献过程和步骤如图1所示。 图1 导出的参考文献…

什么是业务敏捷,如何实现业务敏捷?

点击链接了解详情 作者介绍 前言 随着越来越多行业的企业开始关注敏捷&#xff0c;业务敏捷&#xff08;Business Agility&#xff09;成为一个新的热点。毕竟大部分的行业和组织与软件无关&#xff0c;但是依然要实现业务上的敏捷&#xff0c;所以这个系列会主要谈两点&#…

threejs使用gui改变相机的参数

调节相机远近角度 定义相机的配置&#xff1a; const cameraConfg reactive({ fov: 45 }) gui中加入调节fov的方法 const gui new dat.GUI();const cameraFolder gui.addFolder("相机属性设置");cameraFolder.add(cameraConfg, "fov", 0, 100).name(…

Android中的二级列表-ExpandableListView

Android中的二级下拉列表&#xff0c;类似于某Q的分组&#xff0c;采用ExpandableListView实现&#xff0c;适配器方法如下。 先看效果图&#xff1a;有四个分组&#xff0c;每个分组下都有一些子条目&#xff0c;可以跟着父条目展开而显示 实现代码&#xff1a; 一级列表是一…