Code bài tập CLASSY trên NTUCoder bị sai

Cho em hỏi ạ, bài này em sai chỗ nào: http://ntucoder.net/Problem/Details/4496

Mới test 2 thôi mà nó đã trăm Test rồi, chả bt em sai chỗ nào

#include <bits/stdc++.h>
#define fi(i, a, b) for(int i = a; i <= b; i++)
#define fid(i, a, b) for(int i = a; i >= b; i--)
#define ll long long
#define maxn 105

using namespace std;

int t, n;
string classy, st;

bool cmp(pair<string, string> u, pair<string, string> v){
    for (int i = 0, j = 0;  i < u.first.length() || j < v.first.length(); i += (i < u.first.length()), j += (j < v.first.length())){
        if (u.first[i] != v.first[j]) return u.first[i] > v.first[j];
    }
    fi(i, 0, min(u.second.length(), v.second.length()) - 1){
        if (u.second[i] != v.second[i]) return u.second[i] < v.second[i];
    }
    return u.second.length() < v.second.length();
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL); cout.tie(NULL);
    cin >> t;
    fi(i, 1, t){
        cin >> n;
        pair<string, string> a[n+5];
        fi(j, 1, n){
            getline(cin, a[j].second, ':');
            cin >> st >> classy;
            istringstream ss(st);
            string token[15];
            int m = 1;
            while(getline(ss, token[m], '-')) {
                m++;
            }
            m--;
            fid(k, m, 1){
                if (token[k] == "lower") a[j].first += '1';
                else if (token[k] == "middle") a[j].first += '2';
                else if (token[k] == "upper") a[j].first += '3';
            }
        }
        sort(a+1, a+n+1, cmp);
        fi(j, 1, n) cout << a[j].second;
        cout << "\n==============================";
    }
}

đề còn không có thì có ông trời mới biết

4 Likes

Nhiều token middle liên tiếp chỉ tính là một thôi.

3 Likes

đề em để trong link ngay từ đầu rồi ạ.

em tưởng chỉ middle ở cuối thôi ạ?

mà cái đề cũng chả rõ,
upper thì mặc định là upper-upper, hay middle-upper hay lower-upper
thì làm sao so được lower-upper với upper

Theo history edit thì “ngay từ đầu” là không có nha. Tối qua mềnh có đọc bài của bạn và thấy không có đề nên đã bỏ qua. Và sẽ tiếp tục bỏ qua.

3 Likes

nói câu này là thua rồi, khỏi làm nữa
code chỉ là công cụ, bản thân của nó chỉ để thực thi theo những gì người lập trình muốn, giờ người lập trình còn không biết rõ mình cần phải làm gì thì code gì tầm này nữa

3 Likes

Xem sơ qua theo phần hướng dẫn thì giống với so sánh số ở hệ tam phân nhỉ? Mà dùng thập phân vẫn ổn.

mom: upper-upper-lower-middle class
dad: middle-middle-middle-lower-middle class
queenelizabeth: upper-upper-upper class
chair: lower-lower class
unclebob: middle-middle-lower-middle class

Cho lower là 1, middle là 2 và upper là 3 như ý của bạn.
=>

mom: 3312
dad: 22212
queenelizabeth: 333
chair: 11
unclebob: 1212

Mà tối đa có 10 từ. Và các mục trống tương đương middle - 2
=>

mom: 2222223312
dad: 2222222212
queenelizabeth: 2222222333
chair: 2222222211
unclebob: 2222221212

Đảo lại nào
=>

mom:             2133222222 (2)
dad:             2122222222 (3)
queenelizabeth:  3332222222 (1)
chair:           1122222222 (5)
unclebob:        2121222222 (4)

Giờ có phải là so sánh số nguyên không?
Liệu có ổn không nhỉ?:thinking:

2 Likes

Cho vào string sắp xếp cũng được, tôi AC rồi

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?