HUT 排序训练赛 F - 水果
Problem's Link#
Mean:
略.
analyse:
使用结构体排序。
首先,定义一个结构体,用来存放输入的数据,然后就是输入,注意:这儿有一个小细节,输入数字,然后紧跟着输入字符串,这时需要一个getchar()语句来接收一个回车符,否则输入完数据后的那个回车符将会被下面的字符串接收导致错误,然后就是结构体排序,还要注意的是题目要求按照字典顺序来排序,这儿就需要用到strcmp函数,最后就是输出的问题,注意前面是三个空格。
Time complexity: O(nlogn*mlogm)
view code
c++:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct aa { char c1[81],c2[81]; int n; } a[115]; bool cmp(aa x,aa y) { if(strcmp(x.c1,y.c1)!=0) return strcmp(x.c1,y.c1)<0; return strcmp(x.c2,y.c2)<0; } int main () { int i,t,n,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); getchar(); for(i=1; i<=n; i++) scanf("%s %s %d",a[i].c2,a[i].c1,&a[i].n); sort(a+1,a+n+1,cmp); strcpy(a[0].c1,"00"); strcpy(a[0].c2,"00"); a[0].n=-1; strcpy(a[n+1].c1,"00"); strcpy(a[n+1].c2,"00"); a[n+1].n=-1; sum=a[1].n; for(i=1; i<=n; i++) { if(strcmp(a[i].c1,a[i-1].c1)!=0) { printf("%s\n",a[i].c1); } if(strcmp(a[i].c1,a[i+1].c1)==0&&strcmp(a[i].c2,a[i+1].c2)==0) { sum+=a[i+1].n; } else { printf(" |----%s(%d)\n",a[i].c2,sum); sum=a[i+1].n; } } if(t) { printf("\n"); } } return 0; }
java:
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int cas = in.nextInt(); for (; cas > 0; --cas) { TreeMap<String, TreeMap<String, Integer>> originMap = new TreeMap<>(); int n = in.nextInt(); for (; n > 0; --n) { String name = in.next(); String origin = in.next(); int num = in.nextInt(); TreeMap<String, Integer> nameMap = originMap.get(origin); if (nameMap != null) { int total = num; if (nameMap.get(name) != null) { total = nameMap.get(name) + num; } nameMap.put(name, total); } else { nameMap = new TreeMap<>(); nameMap.put(name, num); originMap.put(origin, nameMap); } } int originMapSize = originMap.size(); for (Map.Entry<String, TreeMap<String, Integer>> originMapEntry : originMap.entrySet()) { --originMapSize; System.out.println(originMapEntry.getKey()); TreeMap<String, Integer> nameMap = originMapEntry.getValue(); for (Map.Entry<String, Integer> nameMapEntry : nameMap.entrySet()) { System.out.println(" |----" + nameMapEntry.getKey() + "(" + nameMapEntry.getValue() + ")"); } } if (cas != 1) { System.out.println(); } } } }
作者:北岛知寒
出处:https://www.cnblogs.com/crazyacking/p/3588644.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?