首页 > 其他分享 >AtCoder Beginner Contest 240 D

AtCoder Beginner Contest 240 D

时间:2023-06-08 19:33:06浏览次数:50  
标签:AtCoder Beginner -- tt 栈顶 stk int 240 编号

D - Strange Balls

tag:栈模拟

发现自己隔了快半年再做此题看错相同数字的球消失的条件,不是 \(k \geq 2\) 而是 \(k = a_i\) 电子竞技不需要视力

题意:当球 \(a_i (1 \leq i \leq N)\) 有 \(a_i\) 个一起出现时,这 \(a_i\) 个球就会消失,问每次放一个球进去,放进去后还剩多少个球?

用个栈记录下当前球的编号和个数即可

放球按一下操作

graph LR 放球 --> 栈空 栈空 --> 添加新的元素到栈顶 放球 --> 栈不空 栈不空 --> 栈顶元素等于要放进去球的编号 栈不空 --> 栈顶元素不等于要放进去球的编号 栈顶元素等于要放进去球的编号 --> 栈顶球的编号等于栈顶球的数量 栈顶球的编号等于栈顶球的数量 --> 出栈 栈顶元素不等于要放进去球的编号 --> 添加新的元素到栈顶

更多细节见代码:

int hh, tt, a[N];
array<int, 2> stk[N];

void solve()
{   
    hh = 1, tt = 0;
    int n;  cin>>n;
    for(int i = 1; i <= n; i++)
        cin>>a[i];
    int res = 0;
    for(int i = 1; i <= n; i++)
    {
        res++;
        if(tt < hh)
            stk[++tt] = {a[i], 1};
        else
        {
            if(tt >= hh && a[i] == stk[tt][0])
            {
                stk[tt][1]++;
                if(tt >= hh && stk[tt][0] == stk[tt][1])
                    res -= stk[tt][1], tt--;
            }
            else
                stk[++tt] = {a[i], 1};
        }
        cout<<res<<'\n';
    }
    return;
}

标签:AtCoder,Beginner,--,tt,栈顶,stk,int,240,编号
From: https://www.cnblogs.com/magicat/p/17467464.html

相关文章

  • 带爆闪车灯手电筒恒流芯片AP2400 多功能LED降压型恒流芯片
    产品描述AP2400是一款PWM工作模式,高效率、外围简单、外驱功率管,适用于输入的高精度降压LED恒流驱动芯片。外驱MOS,最大输出电流可达6A。AP2400可实现三段功能切换,通过MODE1/2/3切换三种功能模式:全亮,半亮,爆闪AP2400工作频率固定在150KHZ左右,同时内置抖频电路,可以降......
  • AtCoder Beginner Contest 150 E Change a Little Bit
    洛谷传送门AtCoder传送门令\(S_i\getsS_i\oplusT_i\),那么代价中\(D\)变成\(S_i=1\)的\(i\)数量。转化为对所有\(f(S)\)求和,最后答案乘上\(2^n\)。考虑贪心地求\(f(S)\)。肯定是先选择小的\(C_i\),把\(S_i\)变成\(0\)。正确性显然。下面把\(C_i\)从大到......
  • AtCoder Beginner Contest 281 Ex Alchemy
    洛谷传送门AtCoder传送门考虑设\(f_i\)为\(i\)的答案,那么:\[f_i=[x_i](1+x)^A\prod\limits_{j=2}^{i-1}(1+f_jx)\]这个东西其实是可以分治FFT的。具体地,设分治区间为\([l,r]\),要求一个\(r-l+1\)次多项式\(\prod\limits_{i=l}^r(1+f_ix)\)。......
  • AtCoder Beginner Contest 287 G Balance Update Query
    洛谷传送门AtCoder传送门线段树上二分入门题。考虑一个贪心:每次询问按\(a_i\)从大到小选。正确性显然。考虑动态开点线段树,每个结点\(a_i\in[l,r]\)存\(\sum\limits_{a_i\in[l,r]}b_i\)和\(\sum\limits_{a_i\in[l,r]}a_ib_i\)。线段树上二分找到第一个\(......
  • AtCoder Beginner Contest 258 G Grid Card Game
    洛谷传送门AtCoder传送门记\(b_i=\sum\limits_{j=1}^ma_{i,j},c_j=\sum\limits_{i=1}^na_{i,j}\)。首先考虑这样一个事情,就是对于\(b_i\le0\)的行有没有可能被选。如果选了它:如果没有选任何列,选这一行肯定不优;如果选了若干列,根据题目的要求,这若干列与这......
  • AtCoder Regular Contest 145
    A答案为Yes当且仅当$s[1]\ne$A或$s[n]\ne$B。注意判\(n=2\)。BAlice可胜利当且仅当\(n\gea\wedgen\bmoda<b\)。C显然我们应该凑\((2i-1,2i)\)。那么我们用一个括号序列描述\(2i-1\)和\(2i\),不难发现答案为\[\frac{\binom{2n}{n}}{n+1}......
  • AtCoder Beginner Contest 304 ABCDE
    AtCoderBeginnerContest304感觉手速场,后\(80\)分钟纯纯坐牢,A-FirstPlayer一些人坐成一个环,从年龄最小开始输出名字constintN=2e5+10;intn;strings[N];inta[N];voidsolve(){intm=1e9+2,p=1;cin>>n;for(inti=1;i<=n;......
  • AtCoder Beginner Contest 304
    A-FirstPlayer(abc304a)题目大意依次给定每个人的姓名和年龄,排成一圈。从年龄最小的人依次输出姓名。解题思路找到年龄最小的,依次输出就好了。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_......
  • Beginner:Client libraries-10 创建并使用插件
    目标:学习创建和加载一个简单的插件使用pluginlib背景本教程来自于 http://wiki.ros.org/pluginlib and WritingandUsingaSimplePluginTutorial.pluginlib是一个c++库,用于从ROS包中加载和卸载插件。插件是从运行库(即共享对象、动态链接库)加载的可动态加载类。使用plugi......
  • Beginner:Client libraries-9 使用ros2doctor识别问题
    目标:在ros2系统中通过ros2doctor工具来识别问题。背景当ros2系统没有按预期运行,可以通过ros2doctor来检查设置。ros2doctor检查ros2的所有方面,包括平台,版本,网络,环境,运行系统等等,警告你可能的错误和问题的原因。ros2doctor是ros2cli的一部分。只要ros2cli按照常规安装,就可以使......