#29681: 請問為何會少輸出一行?


s111010137@student.nqu.edu.tw (Khazix)

學校 : 國立金門大學
編號 : 177202
來源 : [1.172.139.67]
最後登入時間 :
2022-11-09 22:20:56
d492. 10226 - Hardwood species -- UVa10226 | From: [27.246.8.177] | 發表日期 : 2022-03-21 10:08

#include <iostream>

#include <string>

#include <iomanip>

#include <algorithm>

using namespace std;

int main(void)

{

    cin.tie(0);

    std::ios::sync_with_stdio(false);

 

    int t;

 

    (cin >> t).get();

 

    while (t--)

    {

        int i;

        int total;

        int address;

        bool lock;

        int num[10000] = { 0 };

        string input;

        string map[10000];

 

        i = 0;

        total = 0;

 

        // 輸入

 

        while (getline(cin, input) && input != "")

        {

            lock = true;

 

            total++;

 

            // 尋找是否有相同

 

            for (int j = 0; j < i; j++)

            {

                if (input == map[j])

                {

                    num[j]++;

                    lock = false;

                    break;

                }

            }

 

            if (lock == true)

            {

                map[i] = input;

                num[i]++;

                i++;

            }

        }

 

        // 比大小

 

        for (int j = 0; j < i; j++)

        {

            address = j;

 

            for (int k = j + 1, l = 0; k < i; k++)

            {

                while (map[address][l] == map[k][l])

                {

                    l++;

                }

 

                if (map[address][l] > map[k][l])

                {

                    address = k;

                }

 

                l = 0;

            }

 

            swap(map[j], map[address]);

            swap(num[j], num[address]);

        }

 

        // 輸出

 

        for (int j = 0; j < i; j++)

        {

            cout << map[j] << " " << fixed << setprecision(4) << (num[j] * 100.00) / total << '\n';

        }

 

        cout << '\n';

    }

 

    return 0;

}

 

 
#29685: Re:請問為何會少輸出一行?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
d492. 10226 - Hardwood species -- UVa10226 | From: [27.52.100.195] | 發表日期 : 2022-03-21 12:16


    (cin >> t).get();


 


第一列後面空一列,所以要兩個cin.get(),不然會少一組測資。

另外「尋找是否有相同」那邊太慢,會TLE

 
#29687: Re:請問為何會少輸出一行?


s111010137@student.nqu.edu.tw (Khazix)

學校 : 國立金門大學
編號 : 177202
來源 : [1.172.139.67]
最後登入時間 :
2022-11-09 22:20:56
d492. 10226 - Hardwood species -- UVa10226 | From: [27.246.8.177] | 發表日期 : 2022-03-21 18:32


    (cin >> t).get();


 


第一列後面空一列,所以要兩個cin.get(),不然會少一組測資。

另外「尋找是否有相同」那邊太慢,會TLE


感謝大老突破盲點!

 

雖然還是TLE qq

 

 

 
#29688: Re:請問為何會少輸出一行?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
d492. 10226 - Hardwood species -- UVa10226 | From: [39.8.233.87] | 發表日期 : 2022-03-21 19:30


    (cin >> t).get();


 


第一列後面空一列,所以要兩個cin.get(),不然會少一組測資。

另外「尋找是否有相同」那邊太慢,會TLE


感謝大老突破盲點!

 

雖然還是TLE qq

 

 


有幾種作法:

1. 我最開始想到的方法是二分搜尋,找得到就數量加一,找不到就按照順序插入陣列

2. 輸入時不比較,全部輸入完再排序

3. 在討論區看到有人分享的作法,是用C++內建的map

三種方法我試過都能AC

 
ZeroJudge Forum