美文网首页
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