首页 > 编程语言 >2024牛客寒假算法基础集训营6 G 人生的起落 题解

2024牛客寒假算法基础集训营6 G 人生的起落 题解

时间:2024-02-25 13:55:04浏览次数:25  
标签:题解 sum 三元组 2024 牛客 集训营 LL

Question

2024牛客寒假算法基础集训营6 G 人生的起落

定义一个三元组 \((x,y,z)\) 是 “v - 三元组” 当且仅当该三元组满足以下条件:

  1. \(x = z\)
  2. \(x > y\)

现在需要你构造一个 \(n\) 个正整数组成的数组,所有元素之和恰好等于 \(S\), 且恰好有 \(k\) 个长度威 \(3\) 的连续子数组是 "v - 三元组"

Solution

贪心的想, 如果用最少的元素和先构造出 \(k\) 个 "v - 三元组",剩下的元素随意放在后面就好了

那么简单得,最少的方案就是 2 1 2 1 2 1 ......

如果后面没有位置了,即 \(n = 2k + 1\)

那么就先集体增加 \(2\),然后增加 \(1\) 的位置

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

void solve() {
    LL n, S, k; cin >> n >> S >> k;
    vector<LL> a(n + 1);
    int m = 2 * k + 1;
    if (k == 0) {
        S -= n;
        if (S < 0) {
            cout << -1 << endl;
            return;
        }
        for (int i = 1; i <= n; i++) 
            a[i] = 1;
        a[1] += S;
        for (int i = 1; i <= n; i++) {
            cout << a[i] << " ";
        }
        cout << endl;
        return;
    }
    if (n < m) {
        cout << -1 << endl;
        return;
    }
    else if (n == m) {
        LL sum_1 = k * 1, sum_2 = (k + 1) * 2;
        S -= sum_1 + sum_2;
        if (S < 0) {
            cout << -1 << endl;
            return;
        }
        LL x = S / (k + 1); S -= x * (k + 1);
        for (int i = 1; i <= m; i += 2) {
            a[i] = 2 + x;
        }
        for (int i = 2; i <= m; i += 2) {
            if (S > 0) {
                if (x == 0) {
                    cout << -1 << endl;
                    return;
                }
                a[i] = 2; S -= 1;
            }
            else a[i] = 1;
        }
        for (int i = 1; i <= n; i++) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
    else if (n > m) {
        LL sum_1 = k * 1, sum_2 = (k + 1) * 2;
        S -= sum_1 + sum_2;
        for (int i = 1; i <= m; i++) {
            if (i & 1) a[i] = 2;
            else a[i] = 1;
        }
        for (int i = m + 1; i <= n; i++) {
            a[i] = 1; S -= 1;
        }
        if (S < 0) {
            cout << -1 << endl;
            return;
        }
        a[m + 1] += S;
        for (int i = 1; i <= n; i++) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t; cin >> t;
    while (t--) solve();
    return 0;
}

标签:题解,sum,三元组,2024,牛客,集训营,LL
From: https://www.cnblogs.com/martian148/p/18032328

相关文章

  • HGAME 2024 WEEK3 crypto
    CRYPTOexRSA题目描述:RRRSAfromCrypto.Util.numberimport*fromsecretimportflagm=bytes_to_long(flag)p=getStrongPrime(1024)q=getStrongPrime(1024)phi=(p-1)*(q-1)e1=inverse(getPrime(768),phi)e2=inverse(getPrime(768),phi)e3=inverse(getPrime(768),phi)......
  • Atcoder Beginner Contest 342 全题解
    A-Yay!题意给定字符串\(s\)已知该字符串中只有一个字符与其他字符不同求这个字符思想开一个数组\(cnt_i\)来记录\(s\)中每个字符出现的次数,一个数组\(first_i\)来记录\(s\)中每个字符第一次出现的下标。选择\(cnt_i=1\)的\(i\)输出\(first_i\)......
  • UVA12422 (Kengdie) Mua (II) - Expression Evaluator 题解
    题目传送门闲话蒟蒻的第一篇黑题题解!连着花了\(12\)个小时才做出来,打代码\(6\)小时,调试\(6\)小时。一开始怎么编也编不过,直到看到了tiger大神的题解才豁然开朗。思路本题主要是输出函数或运算式子的结果,最重要的就是判断优先级。tiger大神提出了表达式树法和递归......
  • Atcoder ABC 342 全题解
    闲话当我还是一个只会AB的小蒟蒻时,由于不会C又看不懂官方题解,只好看网上的题解。结果:ABC签到题不讲AB对着题意模拟即可。A有个好玩的做法,先看前两个,如果不同跟第三个比较,如果相同看后面哪个字母跟第一个不一样。C由于是将所有的$c_i$替换,所以可得同一个字母最......
  • CF1930E 2..3...4.... Wonderful! Wonderful! 题解
    DescriptionStackhasanarray$a$oflength$n$suchthat$a_i=i$forall$i$($1\leqi\leqn$).Hewillselectapositiveinteger$k$($1\leqk\leq\lfloor\frac{n-1}{2}\rfloor$)anddothefollowingoperationon$a$an......
  • 最佳软件架构书籍终极清单 (2024)
          软件架构是成功开发软件产品的基础。精心设计的软件架构可以大大提高系统的质量。它还有助于降低出错风险,并使将来添加新特性和功能变得更加容易。在这篇博文中,我将为您列出2024年最值得一读的软件架构书籍,以及2024年将出版哪些有趣的软件架构书籍。当然,这些书籍......
  • 2024-02-25 闲话
    昨天晚上ABC有prize,然后我和车昱辉本来说问郭军凯要不要acm。后来想了想还是自己玩了玩。现在发现这个决策实在是太明智了,因为:车昱辉:上半学期感觉他一点动静都还没有呢?yspm:这把属于是闷声发大财。车昱辉还有一条锐评,但是实在是太锐了,我强烈怀疑他的大脑里内置了patternr......
  • [ARC155D] Avoid Coprime Game 题解
    Description非负整数\(x,y\)的最大公约数记为\(\gcd(x,y)\),规定\(\gcd(x,0)=\gcd(0,x)=x\)。黑板上写了\(N\)个整数\(A_1,A_2,...,A_N\),这\(N\)个数的最大公约数是\(1\)。Takahashi和Aoki在玩游戏,有一个变量\(G\)初值为\(0\),他们轮流进行以下操作:从黑板上选择......
  • 2024.2.24 咸话
    昨天一直经典考前毫无必要的emo。于是根本做不动题。今天变得更摆了。不过还是记下一点今天发生的事,省的我现在老是回想。/ll晚上去江边看江对面的烟花,中间有不少还是挺好看的,但是感觉如果中间一些比较惊艳的烟花放在最后不是更好吗qwq比较有趣的是识别无人机摆出的图案是什......
  • 2024牛客寒假算法基础集训营4个人补题题解(B、E)
    B、左右互博不能操作的情况有且仅有所有石子堆的石子个数只有1的时候,因此不管途中怎么操作,让所有石子堆都变成1的总操作次数是确定的。即假设一共有\(n\)堆石子,石子总数为\(sum\),总操作次数为\((sum-n)\)次。因此当\((sum-n)\)%\(2=0\)时一定在sweet操作完(或没有操作)后gui无法......