2017/10/15周测(vjudge——BJFU周赛_6th_2nd)

来源:互联网 发布:linux操作系统移植 编辑:程序博客网 时间:2024/05/19 20:20

今天做得好惨啊,惨到我没有心情说废话。
C题

wa到怀疑人生,差不多反反复复交了六遍,我觉得还挺简单的一个题…
错误:①开了一个double类型的数组,传入的值是string[i]-‘0’,结果无法传入(就这样样例1,2都能出正确结果,微笑)
②有个地方的j写成了i(就这样样例1,2都能出正确结果,微笑)
总结:不知道这算什么样的错误,应该还是手生吧,而且用的方法也不是最直接的方法,绕的路越多,错的机会越大,除了多做几道题还能有什么办法呢…

#include<iostream>using namespace std;#include<algorithm>#include<string>int sherlock[1005];struct Moria{    int num;    double data;}moria[1005];bool cmp(Moria &x, Moria &y){    return x.data < y.data;}int main(){    int n;    while (scanf("%d", &n) != EOF)    {        int i;        string s;        string m;        cin >> s >> m;        for (i = 0; i < n; i++)            sherlock[i] = s[i] - '0';        for (i = 0; i < n; i++)            moria[i].data=m[i]-'0';        int mmin = n, mmax = 0;        sort(moria, moria + n, cmp);        sort(sherlock, sherlock + n);        for (i = 0; i < n; i++)            moria[i].num = 0;        for (i = 0; i < n; i++)        {            int j;            int tempmin;            for (j = 0; j < n; j++)            {                if (!moria[j].num)                {                    tempmin = j;                    break;                }            }            int flag = 0;            for (j = 0; j < n; j++)            {                if (moria[j].data >= sherlock[i] && !moria[j].num)                {                    flag = 1;                    moria[j].num = i + 1;                    mmin--;                    break;                }            }               if (!flag)                moria[tempmin].num = i + 1;        }        for (i = 0; i < n; i++)            moria[i].num = 0;        for (i = 0; i < n; i++)        {            int j;            int tempmin;            for (j = 0; j < n; j++)            {                if (!moria[j].num)                {                    tempmin = j;                    break;                }            }            int flag = 0;            for (j = 0; j < n; j++)            {                if (moria[j].data > sherlock[i] && !moria[j].num)                {                    flag = 1;                    moria[j].num = i + 1;                    mmax++;                    break;                }            }            if (!flag)                moria[tempmin].num = i + 1;        }        for (i = 0; i < n; i++)            moria[i].num = 0;        cout << mmin << endl;        cout << mmax << endl;    }    return 0;}

I题
理解题意很重要…
大意就是一个人要减小他的代码的可读性防止被黑,每一个变量名用a,b,c…依次代替,然后注意是依次,给出一个字符串,判断是不是那个修改过来的。

#include<iostream>using namespace std;#include<algorithm>#include<string>int main(){    string s;    while (cin >> s)    {        int num[30];        memset(num, 0, sizeof(num));        int i;        for (i = 0; i < s.length(); i++)            num[s[i] - 'a']++;        int flag = 0;        int ok = 1;        for (i = 25; i >= 0; i--)        {            if (num[i] != 0)                flag = 1;            if (flag&&num[i] == 0)            {                ok = 0;                break;            }        }        ok ? cout << "YES\n":cout << "NO\n";    }    return 0;}

☝这是我wa在样例5的代码,我的想法就是把每个出现的都记录下来,然后开一个26的数组就可以,然后从后往前遍历,不能出现“空档”。

当时怎么也想不明白wa在哪里,发现自己一旦陷入一种思维误区,就特别难跳出来,这是wa在“bab”这组数据上,现在想想也是,其实我那种想法只是注意了“最终的结果”,其实每一个字母在出现的时候都应该注意顺序,而且字母一定是从a开始的,哎,脑子怎么这么笨啊…

#include<iostream>using namespace std;#include<algorithm>#include<string>#include<string.h>int main(){    string s;    while (cin >> s)    {        int num[27];            memset(num, 0, sizeof(num));        int i;        int pos=0;        int ok=1;        for (i = 0; i < s.length(); i++)        {            if(num[s[i]-'a'])                num[s[i]-'a']++;            else            {                if(s[i]-'a'+1==(pos+1))                {                    pos++;                    num[s[i]-'a']=1;                }                else                {                    ok=0;                    break;                }            }        }        ok ? cout << "YES\n":cout << "NO\n";    }    return 0;}

☝5min我就写出来了,耶,果然还是要看懂题。

A题
今天这场比赛,A题实在是有点坑,对我来说,是觉得A题能够做出来,但是可能敲和调代码会花比较多的时间,而且不是确定百分之百能够过的那种,最后选择了换一个题做,然后最后再来做这个题,结果…我本来担心会超时,结果wa在了样例6,好吧,我的方法可能就是有问题的,在题解里看到了二分…