• 该死的水题


    // 来自ICPC 2018 徐州赛区网络预赛的两道水题

    // 其中一题艰难debug终于AC,另一题疯狂WA直到结束

    // 在今天队友学习了map的操作后,总结此番教训......

    开场水题 Characters with Hash

        英语原题不难理解,结合样例也能弄明白,就是按照要求将字符串转化为一串整数后,求得到没有前导零的整数的位数。很显然,开始前面的一串0是不记录长度的,那么就从前往后一直找到非0开始的数字,到末尾的长度为n-i。首位数字是一位,结果即为(n-i)*2-1;首位数字为两位,结果则为(n-i)*2。

    坑:转化得到的数字为0,输出为1!!!数字0的位数为1啊!!!

    // 感谢Wu两小时坚持不懈的毅力和惊人的洞察能力Orz

    AC代码:

    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <string>
    using namespace std;
    
    string str;
    
    int main()
    {
        int T, n;
        scanf("%d", &T);
    
        char L;
        while(T--)
        {
            cin>>n;cin>>L;
            cin>>str;
            int i=0;
            while(abs((int)L-str[i])==0) i++;
            if(i==n) printf("1
    ");
            else if(abs(L-str[i])<10) printf("%d
    ", (n-i)*2-1);
            else printf("%d
    ", (n-i)*2);
    
        }
        return 0;
    }
    View Code

        代码最后用全使用了cin读入,这是因为不太清楚读取%d %c后接着读取%s是否会有回车符影响下次读取。

    经测试,无论加了注释的getchar();语句与否,都不影响结果正确性,如下:

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    char str[1000100];
    
    int main()
    {
        int T, n;
        scanf("%d", &T);
    
        char L;
        while(T--)
        {
            scanf("%d %c", &n, &L);
            // getchar();
            scanf("%s", str);
            int i=0;
            while(abs(L-str[i])==0) i++;
            if(i==n) printf("1
    ");
            else if(abs(L-str[i])<10) printf("%d
    ", (n-i)*2-1);
            else printf("%d
    ", (n-i)*2);
        }
        return 0;
    }
    View Code

    另一水题 Features Track

        这应该也是简单的模拟题。

        经Wu讲解题意后,我用map以及vector迅速实现了代码,一发两发都WA,我也意识到了题目可能的坑:单个feature可能在同一帧中重复出现,只需要记录一次。可惜处理不当一时陷入僵局。。。

        今天得到Yu的指点终于明白,一行代码的错!!!

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <map>
    #include<string>
    #include <vector>
    using namespace std;
    typedef long long ll;
    typedef pair<string, string> P;
    map<P, int> No;
    int cnt = 0;
    vector<vector<int> > vec(100010);
    int getID(P p)
    {
        if(No[p]) return No[p];
        else return No[p] = ++cnt;
    }
    
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            int n, k;
            string a, b;
            scanf("%d", &n);
            cnt = 0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d", &k);
                while(k--)
                {
                    cin>>a>>b;
                    int no = getID(P(a, b));
                    if(vec[no].size()==0 || vec[no][vec[no].size()-1]!=i)  // 该行size()为0要特判一下。。。因为运行错误导致我另寻他路偏离了轨道
                        vec[no].push_back(i);
                }
            }
            int now = 1, maxx = 1;
            for(int i=1;i<=cnt;i++)
            {
                now = 1;
                for(int j=1;j<vec[i].size();j++)
                {
                    if(vec[i][j]==vec[i][j-1]+1) now++;
                    else now = 1;
                    
                    if(maxx<now) maxx = now;
                }    
            }
            if(!cnt) maxx = 0;
            printf("%d
    ", maxx);
            for(int i=1;i<=cnt;i++) vec[i].clear();
            No.clear();
        }
        
        return 0;
    }
    View Code

        全是我的锅呀。。。简简单单的水题我怎么写了这么多bug T_T

        还得好好多刷题呀。

  • 相关阅读:
    打印水仙花数
    ios9基础知识总结(一)
    简单工厂模式自我理解
    例子
    委托
    IO 磁盘总结
    配置文件命令
    三层架构dal 层基本代码 非查询/查询
    三层架构自我总结
    三层架构源代码
  • 原文地址:https://www.cnblogs.com/izcat/p/9624898.html
Copyright © 2020-2023  润新知