首页 > 其他分享 >AtCoder Beginner Contest 369 A~D

AtCoder Beginner Contest 369 A~D

时间:2024-08-31 21:50:46浏览次数:7  
标签:AtCoder typedef Beginner int ll printf long 369 dp

封面原图 画师かにょこ

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="TybVg4eq-1725111471844" src="https://player.bilibili.com/player.html?aid=113056860406906"></iframe>

AtCoder Beginner Contest 369


我愿称之为等差数列场

A - 369

题意

给两个数,问能和他们构成等差数列的数有多少个

代码

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

int main()
{
    int x,y;
    cin >> x >> y;
    if(x==y) printf("1\n");
    else if((x+y)%2==1) printf("2\n");
    else printf("3\n");
    return 0;
}

B - Piano 3

题意

钢琴有100个键,有的键要用左手按有的要用右手按,现在你要按顺序按一些键,最小化两只手移动的距离

思路

说是最小化,其实手只能放在第一个按的键的位置,答案是固定的,直接模拟即可

代码

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

int main()
{
    int n;
    scanf("%d",&n);
    int L=-1,R=-1,ans=0;
    while(n--)
    {
        int x;
        char c;
        scanf("%d %c",&x,&c);
        if(c=='R')
        {
            if(R==-1) R=x;
            else
            {
                ans+=abs(x-R);
                R=x;
            }
        }
        else
        {
            if(L==-1) L=x;
            else
            {
                ans+=abs(x-L);
                L=x;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

C - Count Arithmetic Subarrays

题意

给你一个数组,问多少个连续子数组是等差数列

思路

记录每两个数之间的差值,连续的相同差值看有多少个,那么答案就可以从1加到n,用求和公式即可
为什么是1加到n呢?假设我们现在有4个数,他们之间的差值都是3,那么在我们的差值数组里面就存了3个3,1个一次算有3个,2个一次算有2个,3个一次算有3个,更多的也是一样的,不难证明
记得开long long

代码

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

int main()
{
    ll n;
    scanf("%lld",&n);
    vector<ll> a(n),del(n-1);
    for (int i=0;i<n;++i)
    {
        scanf("%lld",&a[i]);
        if (i>0)
            del[i-1]=a[i]-a[i-1];
    }
    if(n==1)
    {
        printf("1\n");
        return 0;
    }
    if(n==2)
    {
        printf("3\n");
        return 0;
    }
    if(n==3)
    {
        if(a[1]-a[0]==a[2]-a[1])
            printf("6\n");
        else
            printf("5\n");
        return 0;
    }
    ll ans=n;
    ll cnt=1;
    for(int i=1;i<n-1;i++)
    {
        if(del[i]==del[i-1])
            cnt++;
        else
        {
            ans+=cnt*(cnt+1ll)/2ll;
            cnt=1ll;
        }
    }
    ans+=cnt*(cnt+1ll)/2ll;
    printf("%lld\n",ans);
    return 0;
}

D - Bonus EXP

题意

一共N个怪兽,每个都可以选择打或者不打,打的第偶数个怪兽给的经验翻倍,每个怪兽给的经验已知,最大化总经验值

思路

看题很明显是一个dp,每个数用0/1代表奇偶即可

代码

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int N=1000010;
ll a[N],dp[N][2];

int main()
{
    ll n;
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    dp[0][0]=0,dp[0][1]=-1e18;
    for(int i=1;i<=n;i++)
    {
        dp[i][0]=max(dp[i-1][1]+a[i]*2,dp[i-1][0]);
        dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]);
    }
    printf("%lld\n",max(dp[n][0],dp[n][1]));
    return 0;
}

标签:AtCoder,typedef,Beginner,int,ll,printf,long,369,dp
From: https://blog.csdn.net/swan416/article/details/141759165

相关文章

  • ABC369
    Alink判断\(A\),\(B\)之间可不可以放一个数,如果可以就是\(3\)个,不行就是\(2\)个(左右),但是如果\(A\),\(B\)相等就只有一个。点击查看代码#include<bits/stdc++.h>usingnamespacestd;signedmain(){ inta,b; cin>>a>>b; intx=b-a; if(x!=0){ if(x%2==0......
  • Atcoder Beginner Contest 369
    AtcoderBeginnerContest369唯一的一发罚时吃在A题,消息了。A挂一发的原因是以为\(A,B\)都是一位数,然后循环范围开了\([-10,20]\)。#include<bits/stdc++.h>usingnamespacestd;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr);// int_;cin>>_;while......
  • AtCoder Beginner Contest 053
    A-ABC/ARC#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); intx; cin>>x; if(x<1200)cout<<"ABC"; elsecout<<"ARC&q......
  • luoguP5369 [PKUSC2018] 最大前缀和
    题目n<=20题解想了半天3位状态的折半,然后发现空间开不下(时间也不太行)所以放弃思考,直接枚举答案答案是a中的一个集合,设为S;记集合S的和为sum[S]考虑当S确定时,有多少种方案能使答案恰好为sum[S]。为了处理多种sum相同的情况,记S为从前往后考虑,第一次出现最大ans的集合;记剩余部......
  • Versal Prime 系列 VM2202 自适应 SoC平台,XCVM2202-1LSINSVH1369、XCVM2202-1MLINSVH1
    VersalPrime系列是一款高度集成、多核、异构计算平台,适用于数据中心网络、存储和有线通信等多种应用。它通过在优化了连接性的设备中实现低延迟的内联加速,为这些应用提供突破性的性能。VersalPrime系列VM2202自适应SoC相关型号:XCVM2202-1LSINSVH1369XCVM2202-2LSENSVH13......
  • Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)F - Dividing
    https://atcoder.jp/contests/abc368/tasks/abc368_f#include<bits/stdc++.h>#definexfirst#defineysecondusingnamespacestd;typedeflonglongll;typedefpair<ll,char>pii;constintN=2e5+10,inf=1e9;lln,m,k;intb[N],sg[N],a[N];vector......
  • Atcoder [AGC006D] Median Pyramid Hard 题解 [ 紫 ] [ 二分 ] [ adhoc ]
    MedianPyramidHard:二分trick加上性质观察题。trick我们可以二分值域,然后把大于等于它的数标记成\(1\),其他标记为\(0\)(有些题需要标记成\(-1\)),然后根据这个来check方案是否可行,这通常通过判断某个数是否是\(1\)来实现。本质上其实就是check大于等于它的数能否成为......
  • AtCoder Beginner Contest 368
    A-Cut题意签到题思路代码#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,k;scanf("%d%d",&n,&k);vector<int>v(n);for(inti=0;i<n;i++){scanf("%d",&v[i......
  • AtCoder Beginner Contest 052
    A-TwoRectangles#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); intA,B,C,D; cin>>A>>B>>C>>D; cout<<max(A*B,C*D); ......
  • AtCoder Beginner Contest 051
    A-Haiku直接模拟。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); strings; cin>>s; stringa,b,c; a=s.substr(0,5); b=s.substr(6,7); c=s.substr(......