首页 > 其他分享 >ABC379 题解[A-D]

ABC379 题解[A-D]

时间:2024-11-21 17:19:18浏览次数:1  
标签:cnt int 题解 ll cin long ABC379 using

ABC 379 题解

目录

A Cyclic

man
what can i say?

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;

void sol()
{
    string s;
    cin >> s;
    cout << s[1] << s[2] << s[0] << ' ' << s[2] << s[0] << s[1];
}
int main()
{
    sol();
    return 0;
}

B Strawberries

贪心,把每一段O的个数/k加起来就行了。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;

void sol()
{
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    int cnt = 0, ans = 0;
    for (int i = 0; i < n; ++i)
    {
        if (s[i] == 'O')
            ++cnt;
        else
        {
            ans += cnt / k;
            cnt = 0;
        }
    }
    ans += cnt / k;
    cout << ans << endl;
}
int main()
{

    sol();
    return 0;
}

C Sowing Stones

每个ai如果有石子,只能往前移动,最终状态是1~N 只能有一颗。
求最少的移动代价。

可以分成两部分:

  1. 判断条件是否合法
    这个比较简单,石子数量总和是n,并且前缀和都要大于等于每一位置。

  2. 求解min移动代价
    可以先假设石子全在1,算出最大代价,然后减掉帮你移动好的石子的代价

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
struct dot
{
    ll x, c;
};

bool cmp(dot a, dot b)
{
    return a.x < b.x;
}
void sol()
{
    ll n, m;
    cin >> n >> m;
    vector<dot> arr(m + 1);
    ll sum = 0;

    for (int i = 1; i <= m; i++)
        cin >> arr[i].x;

    for (int i = 1; i <= m; i++)
    {
        cin >> arr[i].c;
        sum += arr[i].c;
    }

    // 判断是否合法
    if (sum != n)
    {
        cout << -1 << endl;
        return;
    }
    sort(arr.begin() + 1, arr.end(), cmp);
    // 计算前缀和
    ll now_tot = 0;
    for (int i = 1; i <= m; i++)
    {
        if (now_tot < arr[i].x - 1) // 如果出现前缀和小于x-1,说明前面的石子覆盖不到x-1
        {
            cout << -1 << endl;
            return;
        }
        now_tot += arr[i].c;
    }
    // 计算
    ll ans = n * (0 + n - 1) / 2; // 假设n个石子都在1位置,代价就是0+1+2+3+...+n-1
    for (int i = 1; i <= m; i++)
        ans -= (arr[i].x - 1) * arr[i].c; // 减去实际位置*石子数量

    cout << ans << endl;
}
int main()
{
    sol();
    return 0;
}

D Home Garden

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;

void sol()
{
    ll q;
    cin >> q;
    ll x, m;
    ll time = 0;//当前时间
    priority_queue<ll, vector<ll>, greater<ll>> pq;//min heap,显然我们要先收获最早种下的,其实用普通队列也行
    while (q--)
    {
        cin >> x;
        if (x != 1)
        {
            cin >> m;
            if (x == 2)
                time += m;//时间增加
            else
            {
                ll ans = 0;
                while (!pq.empty() && time - pq.top() >= m)//如果当前时间离种下的时间已经不小于m
                {
                    ++ans;//可以收获了喵
                    pq.pop();
                }
                cout << ans << '\n';
            }
        }
        else
            pq.push(time);//种下的时间
    }
}
int main()
{
    sol();
    return 0;
}

E Sum of All Substrings

在补了在补了



标签:cnt,int,题解,ll,cin,long,ABC379,using
From: https://www.cnblogs.com/2hard4me/p/18561180

相关文章

  • 去水印小程序downloadFile域名问题解决方式
    ......
  • Atcoder Regular Contest 060 题解
    ARC060C.TakandCards*1583简单题。考虑一个非常非常常见的Trick。把区间平均值为\(k\)转化为区间和为\(0\)只需要将每个数都减去\(k\)即可。然后就是一个朴素的背包求和为\(0\)方案数。注意处理负数下标就好了。#include<bits/stdc++.h>usingnamespacestd;typ......
  • 【题解】洛谷P3531: [POI2012] LIT-Letters
    P3531[POI2012]LIT-Letters写了个假做法有点伤心,本以为是两个都求逆序对然后答案相减,但是这样在部分数据上确实合法,但是实际上毫无章法没有逻辑。正解考虑贪心,我们一个数字肯定要找最前面,第二次出现就去最前面第二次出现的位置,因为如果第一个A放在了后面,那么就有可能产生更对......
  • P8290 填树 题解
    题意:给定一棵树,第\(i\)个点的赋值范围是\([L_i,R_i]\)。计数:选择一条路径,将路径上的点赋值,使得极差\(\leK\);并求出每种这样赋值方案的权值和。\(n\le200\),其余\(\le10^9\)。看见极差,考虑枚举最小值\(x\),然后统计\([x,x+k]\)的答案。思路很简单,但是下一个问题是:\(x......
  • Atcoder Regular Contest 059 题解
    ARC059C.BeTogether签到题。枚举要改成哪个,因为值域只有\([-100,100]\)。然后对总代价取个\(\min\)即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constLLMAXN=105;LLn,A[MAXN];intmain(){ ios::sync_with_stdio(false); cin.ti......
  • [题解]CF1685B Linguistics
    @hzjoiineg为什么是神?思路首先将\(S\)中A的数量不等于\(a+c+d\)的情况判掉。然后将\(S\)划分为ABAB...和BABA...的若干段,对于长度为奇数的段构造方案只能是如下构成:A开头为例):AB和BA共\(\lfloor\frac{len}{2}\rfloor\)个,再加一个A。将\(a\)减一,并用......
  • Atcoder Regular Contest 058 题解
    ARC058C.Iroha'sObsession*1174\(n\)再大一点的就是巨大恶心分类讨论。但我们注意到\(n\leq10^4\),所以我们可以直接暴力枚举然后写个check。首先我们先把被ban掉的数存标记一下。然后从\(n\)开始往上查,一直查到\(10^6\)基本就可以了。然后每次检查一下有没有数位被......
  • 2022沈阳D题题解
    2022沈阳D题题解​ 这题在VP的时候成功把我卡死了,原因是我一直没有想到用KMP去大力匹配,导致我的算法复杂度一直是O(n^2logn),然后就很典的T了。​ VP完了之后想各种优化卡过去,但是都失败了,跑校园跑的时候突然想到怎么解了。​ 现在我是这样看待这个问题的,这个问题应该是可以被拆......
  • rk3588 银河麒麟自动锁屏问题解决
    rk3588适配的银河麒麟在设置-》电源选项中设置“从不”后依然会触发自动锁屏。通过gsettings设置依然无效。gsettingssetorg.ukui.screensaveridle-delay-1gsettingssetorg.ukui.screensaveridle-lock-1gsettingssetorg.ukui.screensaveridle-activation-enabledfa......
  • QT5.15.2 连接MySQL 驱动问题解决方案,无论菜鸟️还是老鸟,解决了就是好鸟
    最近在学QT,现在QT只能在线安装了,用了几天,看到数据库时,需要用MySQL,结果出现了问题。QSqlDatabase:QMYSQLdrivernotloaded、QSqlDatabase:availabledrivers:QSQLITEQODBCQODBC3QPSQLQPSQL7、Sqlconnectfailed、"DrivernotloadedDrivernotloaded"网上找到很多......