贪婪的送礼者(洛谷P1201题题解,Java语言描述)
題目要求
P1201題目鏈接
分析
真是貪婪的送禮者……醉了……
我們應該先讀一下有幾個人。再建立HashMap,其優(yōu)勢很明顯:快速查找+編碼簡單。
畢竟我們讀一讀題給的測試用例,給的人名是:dave、laura、owen、vick、amr,最終錄入的時候順序是:dave、owen、amr、laura、vick,二者順序不一致。如果我們不選用散列的話,就被迫面臨線性結構的順序查找(或者二分查找),雖然本題數(shù)據(jù)量不大,但需要額外的編碼負擔,沒必要。
但我們還是需要一個數(shù)組,目的是:恢復原有的順序。
因為最后輸出的順序還是最初錄入人名的順序:如dave、laura、owen、vick、amr。
但HashMap的數(shù)據(jù)被散列以后就改變了順序,所以可能不是按照這個順序輸出。
我們根據(jù)一個存儲姓名的數(shù)組的String去get到Map里的Integer,即可。
本來想用面向對象,后來發(fā)現(xiàn)根本不用,直接用key-value即可處理。
注意:如不能整除,錢要返還的,返還的解讀就是不分給別人。因為自己給自己,收益是0。
另外,讀測試用例,發(fā)現(xiàn)可能給0個人,這就會發(fā)生除0異常,所以要做特判。但特判以后雖然不處理但也要把數(shù)都讀了,只是不要用而已啦。
如果你不讀的話,就會導致后面的程序讀不該讀到的東西,很容易RE,起碼也是WA,這樣不好。
AC代碼(Java語言描述)
import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = Integer.parseInt(scanner.nextLine());Map<String, Integer> map = new HashMap<>(5);String[] array = new String[num];for (int i = 0; i < num; i++) {String name = scanner.nextLine();map.put(name, 0);array[i] = name;}for (int i = 0; i < num; i++) {String temp = scanner.nextLine();int tempMoney = scanner.nextInt(), tempNum = scanner.nextInt();scanner.nextLine();if (tempNum != 0) {tempMoney /= tempNum;map.put(temp, map.get(temp) - tempMoney * tempNum);for (int j = 0; j < tempNum; j++) {String tempName = scanner.nextLine();map.put(tempName, map.get(tempName) + tempMoney);}}}scanner.close();for (String s : array) {System.out.println(s + " " + map.get(s));}} }總結
以上是生活随笔為你收集整理的贪婪的送礼者(洛谷P1201题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创业公司,没有好领导,有多少人才都是死路
- 下一篇: 【逻辑与计算理论】Lambda 演算——