news 2026/6/26 10:29:07

UVa 426 Fifth Bank of Swamp County

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 426 Fifth Bank of Swamp County

题目描述

题目要求生成已清算支票的汇总列表。输入为按日期排序的支票交易记录,每行包含日期、支票号码和金额。输出需按支票号码升序排列,并分成三列显示。对于不连续(即不是前一个支票号码加111)的支票号码,需在其后标记星号*。输出格式要求每列之间用三个空格分隔,每列包含支票号码(可选*)、金额和日期。

输入格式

第一行一个整数NNN,表示测试用例的数量,后面跟一个空行。
接下来NNN组测试用例,每组包含若干行,每行格式为yy/mm/dd 支票号码 金额,金额可能包含前导零、缺少小数部分等不规范格式。每组测试用例之间由一个空行分隔。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每组测试用例,输出三列格式的支票列表,按支票号码升序排列。每行的三个条目分别来自三列的同一行位置(即先行后列填充)。每列格式为:

nnnn* dddddd.cc yy/mm/dd

其中nnnn为支票号码(无前导零),*为出序列指示符(若连续则为空格),dddddd.cc为金额(至少111位整数部分,222位小数,小于111美元时整数部分为000),yy/mm/dd为日期。列之间用三个空格分隔。每组输出后跟一个空行。

样例

输入

1 93/10/01 998 .65 93/10/01 999 123.89 93/10/05 996 29.99 93/10/06 993 116.52 93/10/12 995 418.00 93/10/15 1001 15045.00 93/10/27 1000 840.85

输出

993 116.52 93/10/06 998* 0.65 93/10/01 1001 15045.00 93/10/15 995* 418.00 93/10/12 999 123.89 93/10/01 996 29.99 93/10/05 1000 840.85 93/10/27

题目分析

本题的核心是处理支票数据并按照三列格式输出。需要处理以下几个子任务:

金额格式化

输入金额可能存在各种不规范格式,例如:

  • 缺少整数部分的.65
  • 缺少小数部分的123.
  • 整数形式无小数点的418
  • 带前导零的0.65

需要将其规范化为dddddd.cc格式:

  • 去除前导零(但保留至少一位整数,若为000则保留一个0)。
  • 若以小数点开头,添加前导0
  • 若以小数点结尾,添加两个0
  • 若无小数点,添加.00
  • 若小数点后只有一位,补一个0
  • 金额大于等于1,000,0001,000,0001,000,000的支票需要忽略(题目保证不会出现,但仍需处理)。

出序列标记

将支票按号码升序排序后,对于每个支票,检查其号码是否等于前一个支票号码+1+1+1。若不是,则在该支票号码后标记*;否则标记空格。第一张支票的号码不标记*(无前一个支票)。

三列输出

输出需要按列填充:先填第一列,再填第二列,最后填第三列。设总支票数为total\textit{total}total,行数RRR的计算方式为:

  • total≤3\textit{total} \le 3total3,则R=1R = 1R=1
  • 否则,需要确定RRR使得三列尽可能均匀填充,且中间列优先填满。

具体计算方式:

  • R=⌈total/3⌉R = \lceil \textit{total} / 3 \rceilR=total/3
  • 第一列(左列)通常有RRR行,但若total mod 3=1\textit{total} \bmod 3 = 1totalmod3=1,则第一列需多一行(共RRR行,但实际分布为第一列RRR行,第二列R−1R-1R1行,第三列R−1R-1R1行?需要根据样例推导)。
    观察参考代码的实现:它采用了显式分配三列起止索引的方法,根据total mod 3\textit{total} \bmod 3totalmod3的值进行分配:
    • total mod 3=0\textit{total} \bmod 3 = 0totalmod3=0:每列total/3\textit{total} / 3total/3个元素。
    • total mod 3=1\textit{total} \bmod 3 = 1totalmod3=1:第一列total/3+1\textit{total} / 3 + 1total/3+1,第二列total/3+1\textit{total} / 3 + 1total/3+1,第三列total/3−1\textit{total} / 3 - 1total/31?实际代码中计算为total -= 4; total /= 3;然后第一列total + 2,第二列2 * total + 4,第三列末尾。这意味着当total mod 3=1\textit{total} \bmod 3 = 1totalmod3=1时,第一列和第二列各多一行。
    • total mod 3=2\textit{total} \bmod 3 = 2totalmod3=2:第一列total/3+1\textit{total} / 3 + 1total/3+1,第二列total/3+1\textit{total} / 3 + 1total/3+1,第三列total/3\textit{total} / 3total/3

输出格式

每行输出三个支票条目(若对应列存在)。每个条目中:

  • 支票号码占555列,右对齐(包括可选的*或空格)。
  • 金额占101010列,右对齐。
  • 日期后无额外空格,直接输出。

列之间用三个空格分隔。

复杂度分析

每组数据需要排序O(Mlog⁡M)O(M \log M)O(MlogM)MMM为支票数量,可接受。

代码实现

// Fifth Bank of Swamp County// UVa ID: 426// Verdict: Accepted// Submission Date: 2016-08-05// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;structitem{intnumber;string number_text,money,date;booloperator<(constitem&another)const{returnnumber<another.number;}};intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line,date,number,money;getline(cin,line);intcases=stoi(line);getline(cin,line);for(inti=1;i<=cases;i++){if(i>1)cout<<'\n';vector<item>checks;while(getline(cin,line),line.length()>0){money="0.00";istringstreamiss(line);iss>>date>>number>>money;// special caseswhile(money.length()>0&&money.front()=='0')money.erase(money.begin());if(money.length()==0)money+="0.00";if(money.front()=='.')money.insert(money.begin(),'0');if(money.back()=='.')money+="00";if(money.find('.')==money.npos)money+=".00";if(money[money.length()-2]=='.')money.push_back('0');if(money[money.length()-3]!='.')money.erase(money.end()-1);if(stod(money)>=1000000)continue;item data;data.number=stoi(number);data.number_text=to_string(data.number);data.money=money;data.date=date;checks.push_back(data);}sort(checks.begin(),checks.end());checks[0].number_text+=' ';for(inti=1;i<checks.size();i++)if(checks[i].number!=checks[i-1].number+1)checks[i].number_text+='*';elsechecks[i].number_text+=' ';pair<int,int>column1,column2,column3;inttotal=checks.size();if(total%3==0){total/=3;column1.first=0,column1.second=total;column2.first=total,column2.second=2*total;column3.first=2*total,column3.second=checks.size();}elseif(total%3==1){total-=4;total/=3;column1.first=0,column1.second=total+2;column2.first=total+2,column2.second=2*total+4;column3.first=2*total+4,column3.second=checks.size();}else{total-=2;total/=3;column1.first=0,column1.second=total+1;column2.first=total+1,column2.second=2*total+2;column3.first=2*total+2,column3.second=checks.size();}total=checks.size();for(inti=column1.first;i<column1.second;i++){cout<<setw(5)<<right<<checks[i].number_text;cout<<setw(10)<<right<<checks[i].money;cout<<' '<<checks[i].date;if(i+column2.first<column2.second&&i+column2.first<total){cout<<" ";cout<<setw(5)<<right<<checks[i+column2.first].number_text;cout<<setw(10)<<right<<checks[i+column2.first].money;cout<<' '<<checks[i+column2.first].date;}if(i+column3.first<column3.second&&i+column3.first<total){cout<<" ";cout<<setw(5)<<right<<checks[i+column3.first].number_text;cout<<setw(10)<<right<<checks[i+column3.first].money;cout<<' '<<checks[i+column3.first].date;}cout<<'\n';}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 17:42:23

Arthas原理剖析:Java线上诊断工具的底层机制与实战

Arthas原理剖析&#xff1a;Java线上诊断工具的底层机制与实战一、线上排障的"黑箱"&#xff1a;传统工具的局限 Java应用在线上出现性能问题时&#xff0c;传统的排障手段往往力不从心。JMX只能查看预定义的指标&#xff0c;无法深入方法内部&#xff1b;jstack只能…

作者头像 李华
网站建设 2026/6/10 5:24:04

如何用Zotero-Style插件彻底改变你的文献管理体验:5大实用技巧

如何用Zotero-Style插件彻底改变你的文献管理体验&#xff1a;5大实用技巧 【免费下载链接】zotero-style Ethereal Style for Zotero 项目地址: https://gitcode.com/GitHub_Trending/zo/zotero-style 还在为海量文献管理而烦恼吗&#xff1f;Zotero作为一款强大的文献…

作者头像 李华
网站建设 2026/6/9 22:36:45

如何快速掌握Horos:macOS平台免费医疗影像查看器的完整指南

如何快速掌握Horos&#xff1a;macOS平台免费医疗影像查看器的完整指南 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos is bas…

作者头像 李华
网站建设 2026/6/10 0:05:59

高校乒乓球课微信小程序毕业设计全套:Java+MySQL后台+完整演示

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;面向本科毕业设计的实战型微信小程序项目&#xff0c;专为高校乒乓球课程选课场景打造。系统分管理员和学生两个角色&#xff1a;管理员能新增/维护账号、录入与归档学生信息、发布及管理课程与公告&#xff1b…

作者头像 李华
网站建设 2026/6/9 21:10:19

人工复制粘贴竞品数据总出错,有没有更可靠的方案? [告别低效搬运] 2026企业级竞品监控全自动化实战:实在Agent如何重塑数据闭环

站在2026年的数字化转型深水区回望&#xff0c;企业间的竞争早已从“信息差”演变为“决策频率差”。 竞品数据的获取速度与精度&#xff0c;直接决定了定价策略、库存周转及市场响应的成败。 然而&#xff0c;许多企业仍深陷“人工搬运”的泥潭&#xff1a;分析师在海量网页间…

作者头像 李华