当前位置: 首页 > news >正文

UVa 538 Balancing Bank Accounts

题目描述

题目要求根据给定的交易记录,计算每个人的净收支,然后输出一组新的交易,使得所有人的账户归零。输出的交易数最多为n−1n-1n1条。金额必须为非负整数。

输入格式

每个测试用例第一行包含两个整数nnn2≤n≤202 \le n \le 202n20)和ttt1≤t≤10001 \le t \le 10001t1000)。接下来nnn行每行一个人名。然后ttt行,每行格式name1 name2 amount,表示name1name1name1支付amountamountamountname2name2name2。输入以0 0结束。

输出格式

对于每个测试用例,输出Case #i,然后输出若干行交易(格式同输入),每条交易金额非负。每个测试用例输出后跟一个空行。

样例

输入

2 1 Donald Dagobert Donald Dagobert 15 4 4 John Mary Cindy Arnold John Mary 100 0 0

输出

Case #1 Dagobert Donald 15 Case #2 Mary John 140 Cindy John 10 Arnold John 150

题目分析

本题的核心是计算每个人的净余额,然后通过n−1n-1n1条交易将所有余额归零。

净余额计算

对于每笔交易A B amount,表示AAA支付给BBBamountamountamount。因此:

  • AAA的余额减少amountamountamount
  • BBB的余额增加amountamountamount

最终,所有余额之和应为000

平衡策略

将所有人中净余额为正者视为“债主”,净余额为负者视为“债务人”。为了用n−1n-1n1条交易完成平衡,可以选取一个人作为“中间人”,例如最后一个人。其他所有人的净余额直接与中间人进行结算:

  • 若某人净余额为正,则中间人支付给该人。
  • 若某人净余额为负,则该人支付给中间人。

这样总共最多n−1n-1n1条交易。

复杂度分析

O(n+t)O(n + t)O(n+t)

代码实现

// Balancing Bank Accounts// UVa ID: 538// Verdict: Accepted// Submission Date: 2016-12-21// UVa Run Time: 0.030s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn,t,cases=0,amount;string name1,name2;while(cin>>n>>t,n>0){map<string,int>money;string names[30];for(inti=1;i<=n;i++){cin>>names[i];money[names[i]]=0;}for(inti=1;i<=t;i++){cin>>name1>>name2>>amount;money[name1]-=amount;money[name2]+=amount;}cout<<"Case #"<<++cases<<'\n';for(inti=1;i<n;i++){if(money[names[i]]>0)cout<<names[i]<<' '<<names[n]<<' '<<money[names[i]]<<'\n';if(money[names[i]]<0)cout<<names[n]<<' '<<names[i]<<' '<<abs(money[names[i]])<<'\n';}cout<<'\n';}return0;}
http://www.cnnetsun.cn/news/2965462.html

相关文章:

  • 如何用Charticulator免费开源图表设计工具5分钟创建专业数据可视化
  • 快速上手javascript-typescript-langserver:5分钟搭建你自己的TypeScript语言服务器
  • 还在手动处理微信消息?让PadLocal帮你解放双手
  • 5步打造你的专属AI语音助手:小智ESP32项目完全指南
  • 微信语音转换终极指南:3分钟掌握Silk v3解码器使用技巧
  • drand核心概念解析:阈值签名与BLS12-381密码学原理
  • MPC555/556 L2U接口Show Cycle机制:总线监控与性能开销深度解析
  • 从理论到实践:6自由度KUKA机械臂的ROS逆运动学实现之旅
  • 【免费领源码+论文】SpringBoot智慧垃圾分类信息管理系统,垃圾识别+积分商城+投放记录全流程
  • OpenAI 2025 年亏损 385 亿美元,AI 前沿商业模式能否盈利引争议
  • 丁虢|GEO 五级成熟度进化测评理论:五级标准自测优化水平,分步进阶 AI 运营层级
  • Java SpringBoot+Vue3+MyBatis Web教师个人成果管理系统系统源码|前后端分离+MySQL数据库
  • 凸性本质:从Jensen与AM-GM不等式到机器学习建模基石
  • 2026年AI学习路线图:你正在慢慢学AI,而这是快速的办法
  • k-Means聚类实战避坑指南:归一化、肘部法陷阱与业务落地
  • 如何用Electron和WebTorrent技术构建游戏启动器:FitGirl-Repack-Launcher深度解析
  • 如何快速突破网盘限速:开源下载助手的完整指南
  • o3-mini作为工程协作者的ML项目落地实践
  • 如何使用Python财经数据接口库AKShare:5个实用技巧快速上手
  • 3大核心技术解密:如何让Windows老游戏在现代系统上焕发新生
  • Koalageddon终极指南:5步免费解锁全平台游戏DLC的完整教程
  • 电脑磁盘空间不够用?重复文件高效清理软件!Windows 必装神器(查找重复文件工具)
  • UI自动化测试中的等待策略:从原理到实战的完整指南
  • Gemini 3.1科学可视化:多模态推理驱动的学术绘图范式革命
  • 基于FreeSWITCH与实时音频流处理的智能外呼系统实战搭建
  • Kali Linux钓鱼网站实战:从攻击视角理解网络安全防御
  • 如何用Translumo在3分钟内实现免费实时屏幕翻译:Windows用户的终极指南
  • GHelper技术深度解析:华硕笔记本轻量级控制与性能优化解决方案
  • MyBatis-Plus 源码分析-性能优化:从查询加速到JVM调优的全链路解析
  • 云里黑白第十一回——告别蓝绿屏:11代CPU装Win11,RAID与VMD驱动的避坑指南