我解2006百度之星程序设计大赛之蝈蝈计分

原创 2006年05月31日 03:50:00

#include <string>
#include <vector>
#include <fstream>
#include <queue>
#include <iostream>
#include <stdio.h>
#include "math.h"

using namespace std;

struct score
{
    char left;
    char right;
};

vector< vector<char> > record;
queue< vector<char> > testRecord;
vector< vector<char> > finalTestRecord;

bool ReachScore(const char& left, const char& right)
{
    if(left >= 21)
    {
        if(right <= 19)
        {
            return true;
        }
    }
    if(right >= 21)
    {
        if(left <= 19)
        {
            return true;
        }
    }

    if((left >= 22) && (right == left -2))
    {
        return true;
    }
    if((right >= 22) && (left == right - 2))
    {
        return true;
    }

    return false;
}

vector<score> GetScore(vector<char> vec)
{
    char left = 0;
    char right = 0;
    vector<score> scoreVec;
    score mk;
    for(size_t i = 0; i < vec.size(); ++i)
    {
        if(i % 2 == 0)
        {
            left += vec.at(i);
        }
        else
        {
            right += vec.at(i);
        }
        if(ReachScore(left, right) == true)
        {
            mk.left = left;
            mk.right = right;
            scoreVec.push_back(mk);
            left = 0;
            right = 0;
        }
        else if (i == vec.size() - 1)
        {
            scoreVec.clear();
            return scoreVec;
        }

    }
    int nLeftScore = 0;
    int nRightScore = 0;
    for(vector<score>::iterator iter = scoreVec.begin();
        iter != scoreVec.end();
        ++iter)
    {
        if((*iter).left > (*iter).right)
        {
            ++nLeftScore;
        }
        else
        {
            ++nRightScore;
        }
    }
    if((nLeftScore == 3 && nRightScore < 3) ||
        (nRightScore == 3 && nLeftScore < 3))
    {
        return scoreVec;
    }
    else
    {
        scoreVec.clear();
        return scoreVec;
    }
}

void GetScore()
{
    vector<score> temp;
    vector<char> chvec;

    for(size_t i = 0; i < testRecord.size(); ++i)
    {
        chvec = testRecord.front();
        testRecord.pop();
        temp = GetScore(chvec);
        if(temp.size() == 0)
        {
            cout << "/nUNKNOWN/n/n";
            return;
        }
        else
        {
            for(vector<score>::iterator iter = temp.begin(); iter != temp.end(); ++iter)
            {
                cout << (int)(*iter).left << ":" << (int)(*iter).right << endl;
            }
            return;
        }
    }
}

int main(int argc, char* argv[])
{
    ifstream is(argv[1], ios::in | ios::binary);
    int nMatch = 0;
    is >> nMatch;
    for(int nMatchIndex = 0; nMatchIndex < nMatch; ++nMatchIndex)
    {
        int nChar = 0;
        is >> nChar;
        vector<char> recordPerMatch;
        unsigned char ch = 0;
        for(int nCharIndex = 0; nCharIndex < nChar; ++nCharIndex)
        {
            is >> ch;
            if(ch != 'X')
            {
                recordPerMatch.push_back(ch - 48);
            }
            else
            {
                recordPerMatch.push_back('X');
            }
        }
        record.push_back(recordPerMatch);
        recordPerMatch.clear(); 
    }

    for(int nMatchIndex = 0; nMatchIndex < nMatch; ++nMatchIndex)
    {
        testRecord.push(record[nMatchIndex]);
        for( ; ; )
        {
            vector<char> temp = testRecord.front();
            vector<char> temp1(temp);
            vector<char> temp2(temp);
            bool tag = false;
            for(vector<char>::iterator iter = temp1.begin();
                iter != temp1.end();
                ++iter)
            {
                if((*iter) == 'X')
                {
                    testRecord.pop();
                    (*iter) = 10;
                    tag = true;
                    break;
                }       
            }

            if(tag == false)
            {
                finalTestRecord.push_back(temp1);
                break;
            }
            else
            {
                testRecord.push(temp1);

                for(vector<char>::iterator iter = temp2.begin();
                    iter != temp2.end();
                    ++iter)
                {
                    if((*iter) == 'X' && (iter+1) != temp2.end())
                    {
                        (*iter) = 10 + (*(iter + 1));
                        temp2.erase(iter + 1);
                        break;
                    }
                }
                testRecord.push(temp2);
            }
        }
        GetScore();
        while(testRecord.size())
        {
            testRecord.pop();
        }
    }

    return 0;
}

2006年百度之星程序设计大赛初赛题目2:蝈蝈式的记分

··题目名称:蝈蝈式的记分 ··内容描述:    蝈蝈小朋友刚刚学会了0-9这十个数字,也跟爸爸妈妈来参加百度每周进行的羽毛球活动。但是他还没有球拍高,于是大人们叫他记录分数。聪明的蝈蝈发现只...

php解:2006 年百度之星程序设计大赛复赛题目 4 ----彩球游戏

2006 年百度之星程序设计大赛复赛题目 4 彩球游戏 X 博士是一个研究儿童智力开发方法的科学家,他为幼儿教育领域做出了许多贡献。最近, X 博士正在研究一种适合儿童的游戏,用以辅助发展儿童的观察力...
  • wxhlxx
  • wxhlxx
  • 2011年06月05日 20:48
  • 816

php解:2006 年百度之星程序设计大赛初赛题目 3 ----变态的比赛规则

2006 年百度之星程序设计大赛初赛题目 3 变态的比赛规则 为了促进各部门员工的交流,百度 (baidu) 举办了一场全公司范围内的 " 拳皇友谊赛 " ,负责组织这场比赛的是百度的超级 " 拳皇 ...
  • wxhlxx
  • wxhlxx
  • 2011年06月04日 20:57
  • 1105

php解: 2005年百度之星程序设计大赛试题总决赛题目 ------八方块移动游戏

2005年百度之星程序设计大赛试题总决赛题目题目描述: 八方块移动游戏要求从一个含 8 个数字(用 1-8 表示)的方块以及一个空格方块(用 0 表示)的 3x3 矩阵的起始状态开始,不断移动该空格方...
  • wxhlxx
  • wxhlxx
  • 2011年06月04日 21:45
  • 2115

2006年百度之星程序设计大赛初赛题目1:饭团的烦恼

饭团的烦恼 同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可...

2005年百度之星程序设计大赛试题初赛题目-题2

百度之星程序设计大赛试题 -2  第二题(共四题 100 分):重叠区间大小( 20 分)  题目描述:请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的大小。 ...

2017"百度之星"程序设计大赛-资格赛-1004-度度熊的午饭时光

ACM模版描述题解我真想吐槽这次比赛出题人是多么的糙,题意难以理解也就算了,还有错别字……有强迫症的我十分痛苦。反正又是一个 dpdp,有些像 0101 背包,看看代码吧,没啥太大区别。虽然也有那么一...
  • f_zyj
  • f_zyj
  • 2017年08月07日 16:18
  • 354

BC 2015年百度之星程序设计大赛 - 初赛(1)(矩形面积-旋转卡壳)

矩形面积 Accepts: 717 Submissions: 1619 Time Limit: 2000/1000 MS (Java/Others) Memory Limit:...

2017"百度之星"程序设计大赛 - 资格赛

度度熊与邪恶大魔王Problem Description度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力。度度熊一共拥有...

2014年百度之星程序设计大赛 - 资格赛 第一题 Energy Conversion

Problem Description   魔法师百小度也有遇到难题的时候——   现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑...
  • Jvc__
  • Jvc__
  • 2014年05月19日 13:23
  • 380
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我解2006百度之星程序设计大赛之蝈蝈计分
举报原因:
原因补充:

(最多只允许输入30个字)