PAT甲级-1109 Group Photo (25 分)

题目:1109 Group Photo (25 分)
分析:模拟,第二次写卡了巨久,结果发现ans数组的第二维开的不够大,导致测试点4过不去,我真的醉了。因此ans第一维开小点,第二维要到10^4
#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,k;
struct Node{
    
    
    string name;
    int height;
};
Node node[10001];
string ans[25][10001];
int cmp(Node a,Node b)
{
    
    
    if(a.height != b.height) return a.height > b.height;
    return a.name < b.name;
}
int main()
{
    
    
    cin>>n>>k;
    for(int i = 0 ; i < n ; i++)
        cin>>node[i].name>>node[i].height;
    sort(node,node+n,cmp);
    int num = n/k;
    int last = num + n % k;
    int cnt = 0;
    int t = 1;
    int f = 0;
    int posi = last / 2;
    for(int i = 0 ; i < last ; i++)
    {
    
    
        ans[0][posi] = node[cnt++].name;
        if(f == 0)
        {
    
    
            f = 1;
            posi -= t++;
        }
        else
        {
    
    
            f = 0;
            posi += t++;
        }
    }
    for(int i = 1; i < k ;i++)
    {
    
    
        f = 0;
        posi = num / 2;
        t = 1;
        for(int j = 0; j < num ;j++)
        {
    
    
            ans[i][posi] = node[cnt++].name;
            if(f == 0)
            {
    
    
                f = 1;
                posi -= t++;
            }
            else
            {
    
    
                f = 0;
                posi += t++;
            }
        }
    }
    for(int i = 0 ; i < last ; i++)
    {
    
    
        if(i == 0)
            cout<<ans[0][i];
        else
            cout<<" "<<ans[0][i];
    }
    cout<<endl;
    for(int i = 1; i < k ;i++)
    {
    
    
        for(int j = 0 ; j < num ; j++)
        {
    
    
            if(j == 0)
                cout<<ans[i][j];
            else
                cout<<" "<<ans[i][j];
        }
        cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43567222/article/details/113848480