字符串string解法
查看原帖
字符串string解法
368751
BEIMINGshewang楼主2020/11/13 22:08

这道题有好两个误区: 如果字符串一开头就输入E,那么就等于没有比赛。输出两个0:0。 再一个就是,如果字符串输出结果刚好满足11(21):0即字符串的长度刚好就是11(21),那么必须得开下一场 即再多输出一个0:0。(不要问为什么,问就是下载了测试集) 个人认为使用字符串方便些,因为他可以直接相加。 substr(a,b)很好用的字符串函数,直接截取字符串a-b的部分。 废话不多说了,代码走起:

#include <iostream>
#include <string>
#include <algorithm>
#include <stdio.h>

using namespace std;

bool dep(int a,int b)
{
    if ((a - b)>1 || (b-a) >1)
        return true;
    else
        return false;
}

bool eve(int a,int b,int num)
{
    if (a > (num-1) || b > (num-1))
        return true;
    else
        return false;
}

int col(string a)
{
    int flag = 0;
    for (int i =0;i<a.length();i++)
    {
        if (a[i] == 'E')
            return flag;
        else
            flag++;
    }
    return flag;
}

void sup(string aimm,int n)
{
    int lsum = 0;
    int wsum = 0;
    for (int i=0;(aimm[i] != '\0')&&(aimm[i] != 'E');i++)
    {
        if (aimm[i] == 'L')
            lsum++;
        else if(aimm[i] == 'W')
            wsum++;
        if ((eve(lsum,wsum,n) && dep(lsum,wsum)) == true)
        {
            cout << wsum << ":" << lsum << endl;
            if ((wsum == n || lsum == n) && (aimm[i+1] == '\0'))
                cout << 0 << ":" << 0 << endl;
            lsum = wsum =0;
        }
        else if((aimm[i+1] == '\0') || (aimm[i+1] == 'E'))

        {
            cout << wsum << ":" << lsum << endl;
            break;
        }
    }


}

int main()
{
    string aimm;
    string a;
    for (int i=0;1;i++)
    {
        cin >> a;
        if (a.length() - col(a) > 0)
        {
            aimm += a.substr(0,col(a));
            break;
        }
        else
        {
            aimm += a.substr(0,col(a));
        }

    }
    if (aimm.length() == 0)

    {
        cout << "0" << ":" << "0" << endl << endl;
        cout << "0" << ":" << "0" << endl;


    }

    else
    {
        sup(aimm,11);
        cout << endl;
        sup(aimm,21);
    }


    return 0;
}
2020/11/13 22:08
加载中...