CCF认证 2018-12 小明放学

用一个变量保存当前时间,过一遍所有路口

利用当前时间和 t 的差值以及对r+y+g的取模,计算当前路口的状态

要用long long 型变量

#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
int main()
{
    ll r,y,g,n,k,t;
    ll ans=0;
    scanf("%lld%lld%lld",&r,&y,&g);
    ll sum=r+y+g;
    scanf("%lld",&n);
    while(n--)
    {
        scanf("%lld%lld",&k,&t);
        if(k==0)
        {
            ans+=t;
        }
        else if(k==1)
        {
            t-=ans;
            t=(t%sum+sum)%sum;
            if(t>r)
            {
                t-=r;
                if(t<=y)
                {
                    ans+=t+r;
                }
            }
            else
            {
                ans+=t;
            }
        }
        else if(k==2)
        {
            t+=r;
            t-=ans;
            t=(t%sum+sum)%sum;
            if(t>r)
            {
                t-=r;
                if(t<=y)
                {
                    ans+=t+r;
                }
            }
            else
            {
                ans+=t;
            }
        }
        else
        {
            t+=r+y;
            t-=ans;
            t=(t%sum+sum)%sum;
            if(t>r)
            {
                t-=r;
                if(t<=y)
                {
                    ans+=t+r;
                }
            }
            else
            {
                ans+=t;
            }
        }
    }
    printf("%lld\n",ans);
    return 0;
}

 

你可能感兴趣的:(CCF认证历年真题)