首页 > 其他分享 >Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)- C

Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)- C

时间:2024-08-25 13:06:22浏览次数:9  
标签:AtCoder le Beginner Contest int ll 值会 define

题意概述

有 \(N\) 个数,分别为 \(H_1,H_2,H_3……H_N\)。

你将使用初始化为 \(0\) 的变量 \(T\) 重复以下操作,直到所有数的值都变为 \(0\) 或更少。

  • 将 \(T\) 增加 \(1\) 。然后,减少最前方 \(H_i\) 值大于等于 \(1\) 的值。如果 \(T\) 是 \(3\) 的倍数,\(H_i\) 的值会减少 \(3\) ;否则,\(H_i\) 的值会减少 \(1\)。

当所有 \(H_i\) 的值变为 \(0\) 或更少时,求 \(T\) 的值。

思路

先找规律 \(T\) 加的时候两次不是三的倍数,第三次是,根据 \(1 + 1 + 3 = 5\) 那么可得当 \(5 \le H_i\) 时, \(T\) 便增加了 \(\lfloor H_i \div 5 \rfloor \times 3\),然后 \(H_i \bmod 5\),剩下 \(H_i \le 4\) 的情况咱之间暴力求解即可。

代码

#include <bits/stdc++.h>
#define ll long long
#define N 200001
#define mod 998244353
using namespace std;
mt19937_64 mrand(random_device{}());

int n;
ll h[N], t;

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &h[i]);
    for (int i = 1; i <= n; i++) {
        if (h[i] >= 5) {
            t += h[i] / 5 * 3;
            h[i] %= 5;
        }
        while (h[i] > 0) {
            t += 1LL;
            if (t % 3)
                h[i]--;
            else
                h[i] -= 3;
        }
    }
    printf("%lld", t);
}

标签:AtCoder,le,Beginner,Contest,int,ll,值会,define
From: https://www.cnblogs.com/Sliver-jiblogs/p/18378838

相关文章

  • ATcoder368D题详解
    D题传送门一道很无脑的题,但考试没写出来爆搜首先看朴素算法1.从根节点开始遍历每个节点2.遇到要保存的节点就进行标记,直到所有保存节点都标记时间复杂度\(O(n)\)其实已经能过了,但我没用(doge)树链剖分(LCA)首先分析1.每一次砍掉枝叶,都是在没有要保存的节点存在子树上时2.......
  • AtCoder Beginner Contest 368
    A-Cut(abc368A)题目大意给定一个数组,将右边\(k\)个数保持原顺序挪到左边,输出。解题思路即从左边第\(n-k\)个数开始输出即可。或者用rotate函数转换一下。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::s......
  • AtCoder Beginner Contest 368 补题记录(A~D,F,G)
    被伟大的G创似辣。Asignedmain(){intn,k;cin>>n>>k;F(i,1,n)cin>>a[i];queue<int>stk;G(i,n,1)stk.push(a[i]);while(k--){intt=stk.front();stk.push(t);stk.pop();}stack<int>......
  • Chain Contestant 题解
    前言题目链接:洛谷;AtCoder。最慢的点才跑\(2\)ms的题解确定不看一看?题意简述给定长度为\(n\)的字符串\(s\),其中\(s_i\in\Omega\),求有多少子序列\(T\)满足任意\(x\in\Omega\),其在\(T\)出现的位置为连续一段,当然,对\(998244353\)取模。\(n\leq10^5\),\(|\Omeg......
  • AtCoder Beginner Contest 049
    A-UOIAUAI#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); charc; cin>>c; if(c=='a'||c=='e'||c=='i'||c==�......
  • AtCoder Beginner Contest 367 A ~ F(无D题)题解
    AtCoderBeginnerContest367A~F(̸\notD)几天前就已经vp过了,但是忘写题解了今天才想起来痛,早知道这么简单,我就不在家里摆烂了A.ShoutEveryday罚了好几发,我打比......
  • AtCoder Beginner Contest 358
    C-Popcorn思路:从集合S中选出非空子集,使得子集中糖果口味有M种。观察到集合S中的元素数量n<=10。因此,总共的子集数为C<=2^10-1,考虑枚举所有的子集。代码:#include<bits/stdc++.h>#defineintlonglong#defineullunsignedlonglong#defineiosios::sync_with_s......
  • AtCoder Beginner Contest 050
    基本上独立做出来了。A-AdditionandSubtractionEasy模拟。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); intA,B; charC; cin>>A>>C>>B; if(C==......
  • P2419 Cow Contest S
    挺有意思的,记一下。P2419CowContestS题目大意:有\(n(n\le100)\)个数,告诉你\(m\)条某两个数的大小关系,问你有多少数的排名是可以确定的(保证不会冲突)。题目思路:首先,我们肯定是可以直接拓扑,那就是变成了问你拓扑时有多少数是单独一层的(本次只有它这一个数入队),但是我们还有......
  • AtCoder Beginner Contest 中的小思维题
    078Dhttps://atcoder.jp/contests/abc078/tasks/arc085_b问题陈述我们有一副由\(N\)张牌组成的扑克牌。每张牌上都写着一个整数。从最上面开始的第\(i\)张牌上的整数是\(a_i\)。两个人X和Y将用这副扑克牌玩一个游戏。最初,X手中有一张写有\(Z\)的牌,Y手中有一张......