Codeforces Round #613 (Div. 2)

A. Mezo Playing Zoma

一个机器人,给一行只包含“R”“L”的指令,代表向左或者向右走。每个操作执行或者不执行,机器人在数轴上起始位置为0,求经过一些列操作后可能在的区间长度。

水题

#include <iostream>
#include <cstring>
using namespace std;
int a,b;
int main()
{
    int n;
    scanf("%d",&n);
    char c;
    for(int i=1;i<=n;i++)
    {
        cin>>c;
        if(c=='L')
        a++;
        else
        b++;

    }
    printf("%d
",a+b+1);
}
View Code

B. Just Eat It!

给定一组数组,求出所有元素的和sum,若sum大于一段子区间的和输出yes,否则输出no。

分析:由于要求一段子区间的最大和,我们可以求出区间【1-n-1】和区间【2-n】的最大区间和再与sum比较

#include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
const int mx=1e5+10;
int a[mx];
int t,n,m;
ll sum;
 
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        bool flag=true;
        sum=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
          scanf("%d",&a[i]);
          sum+=a[i];
        }
        ll cnt=0,maxx=-1;
        for(int i=1;i<=n-1;i++)
        {
            cnt+=a[i];
            if(cnt<a[i])cnt=a[i];
            maxx=max(maxx,cnt);
        }
        cnt=0;
        for(int i=2;i<=n;i++)
        {
            cnt+=a[i];
            if(cnt<a[i])cnt=a[i];
            maxx=max(maxx,cnt);
        }
        if(maxx>=sum)
        printf("NO
");
        else
        printf("YES
");
    }
    return 0;
}
View Code

C. Fadi and LCM

题意:给一个整数N 求一对数(a,b),使x为(a,b)的最小公倍数,且max(a,b)最小

分析:枚举所有N的 因子,每次得到因子 x与N/x 若需使x为一对因子的最小公倍数,则需要满足 gcd(x,N/x)==1;

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll x,z,b;
 
ll gcd(ll a,ll b)
{
   return a%b==0?b:gcd(b,a%b);
}
int main()
{
   ll mn=1e13;
   scanf("%lld",&x);
   mn=min(x,mn);
   for(ll i=2;i<=sqrt(x);i++)
   {
       if(x%i==0&&gcd(x/i,i)==1)
        mn=min(mn,x/i);
   }
   printf("%lld %lld
",x/mn,mn);
   return 0;
}
View Code
原文地址:https://www.cnblogs.com/daoyuan/p/12431167.html