不定长数组vector,STL的使用

把这道题贴出来跟大家一起分享下;这题用vector不定数组有“神笔“之效,看到这题的第一思路是构建结构,然后对应每门课程以及学生的选择情况用简单数组来记录选择的课程 编号,以及用另一变量来记录这学生的选择课程总数。每门学生类推;不用说这样明显效率低,而且难得去写,最终题目也没ac出来大哭

题目:<pat甲级1039>

题意:有N个学生,K门课,给出选择每门课的学生姓名,最后对于给出的N个学生的姓名的选课情况进行询问,要求按顺序给 出每个学生的选课情况;输出格式:学生 选择课程总数 选择的课程编号;注意最后不能有多余空格;

源码:

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include<vector>
using namespace std;
const int maxn = 26*26*26*10+10;
vector <int> s[maxn];
int fact(char s[4]){
    int item = 0;
    for(int i = 0;i<3;i++){
       	item = item*26+(s[i]-'A');
    }
    	item = item*10+(s[3] - '0');
    	return item;
}
int  main()
{
int n,k;
    cin>>n>>k;                   //n表示学生,k表示课程
    for(int i = 0;i<k;i++){
   		int a,b;
   		cin>>a>>b;                //a表示输入课程编号,b表示对应选该课程的学生
    for(int j = 0;j<b;j++){
       char name[5];
       cin>>name;
       int q = fact(name);
       s[q].push_back(a);
    }
}

for(int i = 0;i<n;i++){
     char ss[5];
     cin>>ss;
     int item = fact(ss);
     sort(s[item].begin(),s[item].end());
     cout<<ss<<" "<<s[item].size();
     for(int j = 0;j<s[item].size();j++){
        cout<<" "<<s[item][j];
      }
        cout<<endl;
}
 return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值