zoukankan      html  css  js  c++  java
  • 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
    ",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)
    ",a[i].c2,sum);
                    sum=a[i+1].n;
                }
            }
            if(t) {
                printf("
    ");
            }
        }
        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();
                }
            }
        }
    }
  • 相关阅读:
    C#的泛型的类型参数可以有带参数的构造函数的约束方式吗
    Object Pool
    链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
    ASP.NET MVC应用程序使用axd格式文件
    框架设计--服务总线
    Mylyn
    不要问我能赚多少,当你问这句话的时候,你的思想还停留在给别人打工的阶段,我只是你的仓库,能挣多少得问你自己想挣多少(转)
    maven中如果使用本地jar
    君子和而不同,小人同而不和
    失去控制,并随之失去指挥
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3588644.html
Copyright © 2011-2022 走看看