pat的一道无语题

今天做一道那天没过的PAT考试题,真是各种无语啊,感觉数据出的也有点弱,真是水过咯,如果再强点,估计我这代码也是要跪的节奏。感觉最近状态还是不错,基本没什么特别卡的情况,编码水平感觉到了一个瓶颈,跨过去可能会有更大的提高,继续努力咯。。。。

pat 主页http://pat.zju.edu.cn,1047题,主要是个模拟的选课题目,大家有兴趣可以看下,顺便还是为浙大pat考试打个小广告吧,这样比赛的感觉还是挺爽的,大家没事的时候也可以参加一下。

#include
#include
#include
using namespace std;

struct name_stu
{
    char name[5];
};
struct stu
{
    int len, w[21];
    name_stu name; 
    int v;      
};

struct cou
{
    int q[2505];    
    int len;    
};

stu dp[40001];
cou f[2505];

bool cmp(stu a, stu b)
{
    if(strcmp(a.name.name, b.name.name) < 0) return true;
    return false;         
}

int main()
{
    int n, m, i, j, c, k, k1;
    
    while(scanf("%d%d", &n, &m) != EOF)
    {
        for(i = 0; i < n; ++i)
        {
              scanf("%s %d", dp[i].name.name, &dp[i].len);                
              for(j = 0; j < dp[i].len; ++j)
              {
                  scanf("%d", &dp[i].w[j]);   
                  f[dp[i].w[j]].len = 0;   
              }      
        }
        sort(dp, dp+n, cmp);
        
        for(i = 0; i < n; ++i)
        {
             dp[i].v = i; 
        }
             
        for(i = 0; i < n; ++i)
        {
            for(j = 0; j < dp[i].len; j++)
            {
                 k = dp[i].w[j];
                 k1 = f[k].len;
                 f[k].q[k1] = dp[i].v;
                 f[k].len++;
            }           
        }
        
        for(i = 1; i <= m; ++i)
        {
              printf("%d %d\n",i, f[i].len);
              for(j = 0; j < f[i].len; ++j)
              {
                  printf("%s\n",dp[f[i].q[j]].name.name);  
              }
        }
                    
    }
    return 0;
}



你可能感兴趣的:(算法)