Educational Codeforces Round 55 (Rated for Div. 2) 部分题解

A. Vasya and Book:

题目

传送门1

思路:

分三种情况讨论

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
typedef long long ll;
int main()
{
    ll t,n,x,y,d;
    scanf("%lld",&t);
    while (t--)
    {
        scanf("%lld%lld%lld%lld",&n,&x,&y,&d);
        ll Min=0x3f3f3f3f3f;
        if(abs(y-1)%d&&abs(n-y)%d&&abs(x-y)%d)
        {
            printf("-1\n");
            continue;
        }
        if(x==y)
        {
            printf("0\n");
            continue;
        }
        if(abs(x-y)%d==0)
        {
            Min=min(Min,abs(x-y)/d);
        }
        if(abs(y-1)%d==0)
        {
            ll t=abs(y-1)/d;
            if(abs(x-1)%d==0)
                t=t+abs(x-1)/d;
            else
                t=t+abs(x-1)/d+1;
            Min=min(Min,t);
        }
        if(abs(y-n)%d==0)
        {
            ll t=abs(y-n)/d;
            if(abs(x-n)%d==0)
                t=t+abs(x-n)/d;
            else
                t=t+abs(x-n)/d+1;
            Min=min(Min,t);
        }
        printf("%lld\n",Min);
    }
    return 0;
}

B. Vova and Trophies 

题目:

传送门2

思路:

模拟。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=2*10e5+5;
char s[maxn];
int numa=0,numb=0,loc;
int len;
int main()
{
    scanf("%d",&len);
    scanf("%s",s);
    for (int i=0;i<len;i++)
    {
        if(s[i]=='G')
        {
            numa++;
            loc=i;
        }
        else
        {
            numb++;
        }
    }
    if(numa==0)
    {
        printf("0\n");
    }
    else if(numb==0)
    {
        printf("%d\n",len);
    }
    else
    {
        int tlen=0,flag=0;
        int Max=-0x3f3f3f3f;
        for (int i=0;i<len;i++)
        {
            if(s[i]=='G')
            {
                tlen++;
            }
            else
            {
                //int tnuma=numa-tlen;
                if(numa-tlen>0)
                {
                    numa-=tlen;
                    tlen++;
                    int j=i+1;
                    for (;j<len;j++)
                    {
                        if(s[j]=='S'||j==loc)
                            break;
                        tlen++;
                    }
                }
                Max=max(Max,tlen);
                tlen=0;
            }
        }
        printf("%d\n",Max);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41410799/article/details/84595377