[Atcoder Regular Contest 062] Tutorial

Link:

ARC 062 传送门

C:

每次判断增加a/b哪个合法即可

并不用判断两个都合法时哪个更优,因为此时两者答案必定相同

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
ll n,a,b,x,y;
int main()
{
    scanf("%lld%lld%lld",&n,&a,&b);
    for(int i=1;i<=n-1;i++)
    {
        scanf("%lld%lld",&x,&y);
        ll a1=((a-1)/x+1)*x,b1=a1/x*y;
        ll b2=((b-1)/y+1)*y,a2=b2/y*x;
        if(a1>=a&&b1>=b) a=a1,b=b1;
        else a=a2,b=b2;
    }
    printf("%lld",a+b);
    return 0;
}
Problem C

D:

又是一道类似构造的题目……

对于每一个$p$先找到一个$g$与其对应保证合法

对这些已经配对的$g$进行改变是没有意义的,毕竟改了这样一个$g$就要再改一个$p$

于是我们发现最优方案是对剩下$cnt(g)-cnt(p)$个$g$中的一半进行更改

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e5+10;
char s[MAXN];
int pp=0,rk=0,len;
int main()
{
    scanf("%s",s);len=strlen(s);
    for(int i=0;i<len;i++)
        if(s[i]=='p') pp++;
        else rk++;
    printf("%d",(rk-pp)/2);
    return 0;
}
Problem D

E:

直接$hash$暴力就行了?

以后再填……

F:

猜你喜欢

转载自www.cnblogs.com/newera/p/9278545.html
今日推荐