PAT2020年春季3月份备考_按照套卷刷真题(1-2)

题干:1153 Decode Registration Card of PAT (25 分)

  • 题解:我自己的题解拿了19分,最后两个点超时,就算用了无序映射也没有解决。。。但对我这个水平的人来说,已经很知足了。
  • 这题可以说是非常经典的一道题,这题用到了很多C++ string的很多操作,这点在考前必须熟练,还有对map的使用,如果这题会做得来,如果再熟悉一部分的数学操作,和对数组或者说vector或者数组的遍历在解决问题中的几种应用有一定的认识的话,解决20,25的题应该是比较轻松地
  • 这题我做了快1个小时,也比较符合考试要求的时间,因为我并没有准备90分这个样子。。。50/60已经很知足了。。。这次主要是一个通过PAT的备考过程也准备了考研计算机的专业课。。。后面不太准备花时间,再做算法题就是等考研初试以后,面试的时候再到目标院校去考了。。。PAT算作一个学习的过程吧
  • 仔细想想自己也是练了不少题才到今天的这个程度的,才又心情做完题目去写博客。。。建议大家就刷PAT的题库就好了,不要找其他的题库,意义不是很大,各个的OJ上面的题目对考甲级和乙级的太难了,有不少的超纲题,PAT顶级才有考,但是如果时间非常充裕可以考虑LeetCode,这个平台上面的难度和pat甲级差不多,而且甲级的后面两题,涉及到图,树,堆这种数据结构的应用,leetcode上面有不少一致的题型
  • 编码和调试上面,我墙裂推荐visual studio,因为是疫情是远程考试,请珍惜这个能够用重型IDE的机会,你如果没试过,根本不知道visual studio用来调试到底有多爽,但是需要注意的是,visual studio在开始之前需要加一些配置上面的细节,你如果遇到了可以去百度,但是并不复杂,主要的就是两样(一个是不安全函数,scanf和freopen,还有通用头文件,vs本身没有,需要自己建一个,细节问百度)如果做不来跟我留言,这里顺带一提,freopen和前面的ifndef配合可以显著提高调试程序的效率,相信我,使用的方法你可以参考百度上面和我代码里面的用法,这里提醒你注意一个,这个in.txt需要放在源代码文件的同一目录下。。。而不是可执行文件
  • // A1153.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include<unordered_map>
    #include <bits/stdc++.h>
    using namespace std;
    #pragma warning(disable:4996)
    struct elem
    {
        string a;
        int b;
    };
    struct dot {
        string c;
        int d;
    };
    vector<elem> an;
    int n, m, i, t2, t3;
    string t1, t4;
    bool cmp1(elem x,elem y) {
        if (x.b != y.b) {
            return x.b > y.b;
        }
        else {
            return x.a < y.a;
        }
    }
    
    bool cmp2(dot x, dot y) {
        if (x.d != y.d) {
            return x.d > y.d;
        }
        else {
            return x.c < y.c;
        }
    }
    
    void f1(int time,string x) {
        int j;
        cout << "Case " << time << ": 1 " << x<<endl;
        char c = x[0];
        vector<elem> bn1;
        for (j = 0; j < n; j++) {
            if ((an[j].a)[0] == c)
            {
                bn1.push_back(an[j]);
            }
        }
        sort(bn1.begin(), bn1.end(), cmp1);
        int len = bn1.size();
        if (len == 0) {
            cout << "NA\n";
        }
        else {
            for (j = 0; j < len; j++)
            {
                cout << bn1[j].a << " " << bn1[j].b << endl;
            }
        }
    
    }
    
    void f2(int time, string param) {
        cout << "Case " << time << ": 2 " << param << endl;
        int k;
        int score = 0,count=0;
        for (k = 0; k < n; k++) {
            if ((an[k].a).substr(1, 3) == param) {
                count++;
                score += an[k].b;
            }
        }
        if (count==0)
        {
            cout << "NA\n";
        }
        else {
            cout << count << " " << score << endl;
        }
        
    }
    
    void f3(int time, string param) {
        cout << "Case " << time << ": 3 " << param << endl;
        unordered_map<string, int> cn;
        int k;
        for (k = 0; k < n; k++) {
            if ((an[k].a).substr(4, 6) == param) {
                cn[(an[k].a).substr(1, 3)]++;
            }
        }
        vector<dot> xn;
        if (cn.size() == 0) {
            cout << "NA\n";
        }
        else {
            for (auto it : cn) {
                xn.push_back({ it.first, it.second });
            }
            sort(xn.begin(), xn.end(),cmp2);
            for (auto it : xn) {
                cout << it.c << " " << it.d<<endl;
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
    #ifndef ONLINE_JUDGE
        freopen("in.txt", "r", stdin);
    #endif // !ONLINE_JUDGE
    
        cin >> n >> m;
        for (i = 0; i < n; i++) {
            cin >> t1 >> t2;
            an.push_back({ t1,t2 });
        }
        for ( i = 0; i < m; i++)
        {
            cin >> t3 >> t4;
            switch (t3)
            {
            case 1:
                f1(i+1,t4);
                break;
            case 2:
                f2(i + 1, t4);
                break;
            case 3:
                f3(i + 1, t4);
                break;
            default:
                break;
            }
        }
        return 0;
    }
    
    

    别人的满分代码,需要的朋友可以参考。。。但是我这个博客主要是写给和我水平接近的人看的。。。。我的代码看起来应该会更好理解和吸收,虽然不是满分。。。

  • #include <iostream>
    #include <vector>
    #include <unordered_map>
    #include <algorithm>
    using namespace std;
    struct node {
        string t;
        int value;
    };
    bool cmp(const node &a, const node &b) {
        return a.value != b.value ? a.value > b.value : a.t < b.t;
    }
    int main() {
        int n, k, num;
        string s;
        cin >> n >> k;
        vector<node> v(n);
        for (int i = 0; i < n; i++)
            cin >> v[i].t >> v[i].value;
        for (int i = 1; i <= k; i++) {
            cin >> num >> s;
            printf("Case %d: %d %s\n", i, num, s.c_str());
            vector<node> ans;
            int cnt = 0, sum = 0;
            if (num == 1) {
                for (int j = 0; j < n; j++)
                    if (v[j].t[0] == s[0]) ans.push_back(v[j]);
            } else if (num == 2) {
                for (int j = 0; j < n; j++) {
                    if (v[j].t.substr(1, 3) == s) {
                        cnt++;
                        sum += v[j].value;
                    }
                }
                if (cnt != 0) printf("%d %d\n", cnt, sum);
            } else if (num == 3) {
                unordered_map<string, int> m;
                for (int j = 0; j < n; j++)
                    if (v[j].t.substr(4, 6) == s) m[v[j].t.substr(1, 3)]++;
                for (auto it : m) ans.push_back({it.first, it.second});
            }
            sort(ans.begin(), ans.end(),cmp);
            for (int j = 0; j < ans.size(); j++)
                printf("%s %d\n", ans[j].t.c_str(), ans[j].value);
            if (((num == 1 || num == 3) && ans.size() == 0) || (num == 2 && cnt == 0)) printf("NA\n");
        }
        return 0;
    }

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
REGISTER ADDRESS REGISTER DATA(1) HEX 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 LVDS_ RATE_2X 0 0 0 0 0 0 0 0 0 0 0 0 0 GLOBAL_ PDN 2 PAT_MODES_FCLK[2:0] LOW_ LATENCY_E N AVG_EN SEL_PRBS_ PAT_ FCLK PAT_MODES SEL_PRBS_ PAT_GBL OFFSET_CORR_DELAY_FROM_TX_TRIG[5:0] 3 SER_DATA_RATE DIG_GAIN_ EN 0 OFFSET_CORR_DELAY _FROM_TX_TRIG[7:6] DIG_ OFFSET_ EN 0 0 0 1 0 0 0 0 4 OFFSET_ REMOVA L_SELF OFFSET_ REMOVAL_ START_ SEL OFFEST_ REMOVAL_ START_ MANUAL AUTO_OFFSET_REMOVAL_ACC_CYCLES[3:0] PAT_ SELECT_ IND PRBS_ SYNC PRBS_ MODE PRBS_EN MSB_ FIRST DATA_ FORMAT 0 ADC_RES 5 CUSTOM_PATTERN 7 AUTO_OFFSET_REMOVAL_VAL_RD_CH_SEL 0 0 0 0 0 0 0 0 0 0 CHOPPER_EN 8 0 0 AUTO_OFFSET_REMOVAL_VAL_RD B 0 0 0 0 EN_ DITHER 0 0 0 0 0 0 0 0 0 0 0 D GAIN_ADC1o 0 OFFSET_ADC1o E GAIN_ADC1e 0 OFFSET_ADC1e F GAIN_ADC2o 0 OFFSET_ADC2o 10 GAIN_ADC2e 0 OFFSET_ADC2e 11 GAIN_ADC3o 0 OFFSET_ADC3o 12 GAIN_ADC3e 0 OFFSET_ADC3e 13 GAIN_ADC4o 0 OFFSET_ADC4o 14 GAIN_ADC4e 0 OFFSET_ADC4e 15 PAT_PRB S_LVDS1 PAT_PRBS_ LVDS2 PAT_PRBS_ LVDS3 PAT_PRBS_ LVDS4 PAT_LVDS1 PAT_LVDS2 HPF_ ROUND_ EN_ADC1-8 HPF_CORNER_ADC1-4 DIG_HPF_ EN_ADC1-4 17 0 0 0 0 0 0 0 0 PAT_LVDS3 PAT_LVDS4 0 0 18 0 0 0 0 PDN_ LVDS4 PDN_ LVDS3 PDN_ LVDS2 PDN_ LVDS1 0 0 0 0 INVERT_ LVDS4 INVERT_ LVDS3 INVERT_ LVDS2 INVERT_ LVDS1 19 GAIN_ADC5o 0 OFFSET_ADC5o 1A GAIN_ADC5e 0 OFFSET_ADC5e 1B GAIN_ADC6o 0 OFFSET_ADC6o 1C GAIN_ADC6e 0 OFFSET_ADC6e 1D GAIN_ADC7o 0 OFFSET_ADC7o 1E GAIN_ADC7e 0 OFFSET_ADC7e 1F GAIN_ADC8o 0 OFFSET_ADC8o 20 GAIN_ADC8e 0 OFFSET_ADC8e 21 PAT_PRB S_LVDS5 PAT_PRBS_ LVDS6 PAT_PRBS_ LVDS7 PAT_PRBS_ LVDS8 PAT_LVDS5 PAT_LVDS6 0 HPF_CORNER_ADC5-8 DIG_HPF_ EN_ADC5-8 23 0 0 0 0 0 0 0 0 PAT_LVDS7 PAT_LVDS8 0 0
最新发布
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Exodus&Focus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值