链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=294

 

一步一步模拟出来的....

把情况考虑全面: “Both robots know the full sequence in advance”

 

 
#include <iostream>
#include<cmath>
#include<cstdio>
using namespace std;
class bot
{
    public:
    char col;
    int pos;
};
bot data[105];

int main()
{

   // freopen("1.txt","r",stdin);

    int t;
    int ans;
    int n;
    int a,b;
    int i,j,k;
    cin>>t;
    int to,tb;
    bool s;
    for(k=1;k<=t;k++)
    {
        s=false;
        ans=0;
        to=1;tb=1;
        cin>>n;
        for(i=0;i<n;i++)
            cin>>data[i].col>>data[i].pos;
        i=0;
        while(i<n)
        {

            if(to==data[i].pos&&data[i].col=='O' )
            {

                i++;
                for(j=i; j<n; j++)
                    if(data[j].col=='B')
                    {
                        s=true;
                        break;
                    }
                if(s)
                {
                    if(tb<data[j].pos)
                        tb++;
                    else if(tb>data[j].pos)
                        tb--;
                    s=false;
                }

                ans++;

            }
            else if(tb==data[i].pos&&data[i].col=='B' )
            {


                i++;
                for(j=i; j<n; j++)
                    if(data[j].col=='O')
                    {
                        s=true;
                        break;
                    }
                if(s)
                {
                    if(to<data[j].pos)
                        to++;
                    if(to>data[j].pos)
                        to--;
                    s=false;
                }

                ans++;

            }

            else
            {
                for(j=i; j<n; j++)
                    if(data[j].col=='O')
                    {
                        s=true;
                        break;
                    }
                if(s)
                {

                    if(to<data[j].pos)
                        to++;
                    else if(to>data[j].pos)
                        to--;
                    s=false;
                }
                for(j=i; j<n; j++)
                    if(data[j].col=='B')
                    {
                        s=true;
                        break;
                    }
                if(s)
                {
                    if(tb<data[j].pos)
                        tb++;
                    else if(tb>data[j].pos)
                        tb--;
                    s=false;
                }

                ans++;
            }



        }


        cout<<"Case #"<<k<<": "<<ans<<endl;

    }


    return 0;
}