1095 解码PAT准考证 (25 分)

1095

部分测试点超时,答案没问题

cin、cout又超时了Orz

#include <bits/stdc++.h>

using namespace std;
struct student{
    string id;
    int score;
};
int n,m,k,cnt=1;
vector<student> s(10000);
bool cmp(student a,student b){
    if(a.score!=b.score) return a.score>b.score;
    else return a.id<b.id;
}
void type1(string ins)
{
    vector<student> a;
    char c=ins[0];
    for(int i=0;i<n;i++){
        if(s[i].id[0]==c){
            a.push_back(s[i]);
        }
    }
    if(a.size()!=0){
        sort(a.begin(),a.end(),cmp);
        for(int i=0;i<a.size();i++)
            cout<<a[i].id<<" "<<a[i].score<<endl;
    }else  cout<<"NA"<<endl;
    cnt++;
}
void type2(string ins)
{
    vector<int> a(2);
    for(int i=0;i<n;i++){
        if(s[i].id.substr(1,3)==ins){
            a[0]++;a[1]+=s[i].score;
        }
    }
    if(a[0]!=0)
        cout<<a[0]<<" "<<a[1]<<endl;
    else
        cout<<"NA"<<endl;
    cnt++;
}
void type3(string ins)
{
    vector<student> tmp;
    map<string,int> a;
    for(int i=0;i<n;i++){
        if(s[i].id.substr(4,6)==ins){
            a[s[i].id.substr(1,3)]++;
        }
    }
    for(map<string,int>::iterator it=a.begin();it!=a.end();it++){
        tmp.push_back({it->first,it->second});
    }
    if(tmp.size()!=0){
        sort(tmp.begin(),tmp.end(),cmp);
        for(int i=0;i<tmp.size();i++)
            cout<<tmp[i].id<<" "<<tmp[i].score<<endl;
    }else  cout<<"NA"<<endl;
    cnt++;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt", "r", stdin);
#endif
    string ins;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>s[i].id>>s[i].score;
    }
    while(m--){
       cin>>k>>ins;
       if(k==1){
            cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
            type1(ins);

       }else if(k==2){
            cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
            type2(ins);
       }else{
            cout<<"Case "<<cnt<<": "<<k<<" "<<ins<<endl;
            type3(ins);
       }
    }
    return 0;
}

AC答案

改成scanf、printf后就AC了
发现跟柳神思路基本一样,开心~
有个巧合就是cmp函数可以复用,还挺不错的~
当然unordered map还是比map快,但我map也通过了哈哈

#include <bits/stdc++.h>

using namespace std;
struct student{
    string id;
    int score;
};
int n,m,k,cnt=1;
vector<student> s(10000);
bool cmp(student a,student b){
    if(a.score!=b.score) return a.score>b.score;
    else return a.id<b.id;
}
void type1(string ins)
{
    vector<student> a;
    char c=ins[0];
    for(int i=0;i<n;i++){
        if(s[i].id[0]==c){
            a.push_back(s[i]);
        }
    }
    if(a.size()!=0){
        sort(a.begin(),a.end(),cmp);
        for(int i=0;i<a.size();i++)
            printf("%s %d\n",a[i].id.c_str(),a[i].score);
    }else  printf("NA\n");
    cnt++;
}
void type2(string ins)
{
    vector<int> a(2);
    for(int i=0;i<n;i++){
        if(s[i].id.substr(1,3)==ins){
            a[0]++;a[1]+=s[i].score;
        }
    }
    if(a[0]!=0) printf("%d %d\n",a[0],a[1]);
    else
        printf("NA\n");
    cnt++;
}
void type3(string ins)
{
    vector<student> tmp;
    map<string,int> a;
    for(int i=0;i<n;i++){
        if(s[i].id.substr(4,6)==ins){
            a[s[i].id.substr(1,3)]++;
        }
    }
    for(map<string,int>::iterator it=a.begin();it!=a.end();it++){
        tmp.push_back({it->first,it->second});
    }
    if(tmp.size()!=0){
        sort(tmp.begin(),tmp.end(),cmp);
        for(int i=0;i<tmp.size();i++)
            printf("%s %d\n",tmp[i].id.c_str(),tmp[i].score);
    }else  printf("NA\n");
    cnt++;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt", "r", stdin);
#endif
    string ins;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        cin>>s[i].id>>s[i].score;
    }
    while(m--){
       cin>>k>>ins;
       if(k==1){
            printf("Case %d: %d %s\n",cnt,k,ins.c_str());
            type1(ins);

       }else if(k==2){
            printf("Case %d: %d %s\n",cnt,k,ins.c_str());
            type2(ins);
       }else{
            printf("Case %d: %d %s\n",cnt,k,ins.c_str());
            type3(ins);
       }
    }
    return 0;
}

PAT乙级完结撒花~~~

2021-8-12021-10-20,快3个月的时间吧,当然也不是每天都刷题,还要做些别的事情+玩:)

有些题还是没有完全消化,还会再复习哒~

总体感受就是编程能力稍微有些提升,对C++的STL更为熟练,逻辑思维也有所提高。

还有最重要的是,感受到了坚持的力量!!非常有成就感呀!

接下来,继续努力!!!
以后甲级刷题记录在这里啦甲级记录地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值