美文网首页
PAT 甲级 刷题日记|A 1109 Group Photo (

PAT 甲级 刷题日记|A 1109 Group Photo (

作者: 九除以三还是三哦 | 来源:发表于2021-08-29 10:53 被阅读0次

    思路

    涉及到排序 + 模拟。这边我不是单纯的模拟左一个右一个的放置,而是找到每一个位置应该是第几高,按顺序填进去,比单纯的模拟在代码实现上要简单许多。

    代码

    using namespace std;
    
    const int maxn = 10003;
    int N, K;
    int num[maxn];
    int group[maxn];
    
    struct node {
        string name;
        int hei;
    }Node[maxn];
    
    bool cmp(node a, node b) {
        if (a.hei != b.hei) return a.hei > b.hei;
        else return a.name < b.name;
    }
    
    int main() {
        cin>>N>>K;
        for (int i = 0; i < N; i++) {
            cin>>Node[i].name>>Node[i].hei;
        } 
        sort(Node, Node + N, cmp);
        int ans = 0;
        for (int i = 0; i < K; i++) {
            if (i != K - 1) {
                num[i] = N / K;
                ans += num[i];
            } else {
                num[i] = N - ans;
            }
        }
        int indexs = 0;
        for (int i = K - 1; i >= 0; i--) {
            for (int j = 0; j < num[i]; j++) {
                int now = j - (num[i] / 2);
                if (now < 0) group[i + j] = 2 * abs(now) - 1 + indexs;
                else group[i + j] = 2 * abs(now) + indexs;
                cout<<Node[group[i+j]].name;
                if (j != num[i] - 1) cout<<" ";
            }
            indexs += num[i];
            cout<<endl;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:PAT 甲级 刷题日记|A 1109 Group Photo (

          本文链接:https://www.haomeiwen.com/subject/ejitiltx.html