首页 > 其他分享 >GYM 105262 L

GYM 105262 L

时间:2024-09-17 22:35:07浏览次数:11  
标签:int GYM 合并 back stk 字符串 ans 105262

题目描述

我们定义 \(F_0=a,F_i=F_{i-1}+b+F_{i-1}(i\ge 1)\),这里加法是指将字符串拼接。

给定一个字符串 \(S=F_{A_1}+F_{A_2}+\dots +F_{A_N}\),接着我们将对 \(S\) 进行一系列变换知道无法进行变换为止:

  • 选择一个 \(1\le i< |S|且S_i=S_{i+1}\),删除 \(S_{i+1}\),并将 \(S_i\) 替换成下一个,这里的下一个是指变成字母表中的下一个,特别的,\(z\) 的下一个是 \(a\)。

求最终的 \(|S|\)。

思路

仔细思考一下,便会发现其实每个字符串并不会往很深处合并。因为其中每个 \(F\) 必定为 abababa... 的形式,所以两个字符串 \(F_i,F_j(i,j\ge 1)\) 最多只会合并 \(2\) 次(先把中间的两个 a 合并成 b,在将其与旁边的 b 合并一次),而通过 \(F_0\) 合并所需的次数是 \(2^k\),而每次你都要把一个 c 一直合并到 a,但 \(N\le 10^5\),所以不可能。

时空复杂度均为 \(O(N)\)。

代码

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

const int MAXN = 100001;

int t, n;
vector<char> stk;
ll ans;
string s[20];

void work() {
  s[0] = 'a';
  for(int i = 1; i <= 15; ++i) {
    s[i] = s[i - 1] + 'b' + s[i - 1];
  }
}

void Solve() {
  cin >> n;
  ans = 0;
  stk.clear();
  for(int i = 1, x; i <= n; ++i) {
    cin >> x;
    ans += s[x].size();
    for(char c : s[min(6, x)]) {
      for(; !stk.empty() && c == stk.back(); stk.pop_back()) {
        c = (c - 'a' + 1) % 26 + 'a';
        ans--;
      }
      stk.push_back(c);
    }
  }
  cout << ans << "\n";
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  work();
  for(cin >> t; t--; Solve()) {
  }
  return 0;
}

标签:int,GYM,合并,back,stk,字符串,ans,105262
From: https://www.cnblogs.com/yaosicheng124/p/18417663

相关文章

  • GYM 105125 C
    题目描述给定\(NM\)个数\(A_1,A_2,\dots,A_{NM}\),你要将这些数分成\(N\)个数组,每个数组\(M\)个数。接着你要将这些数组按字典序排序。对于排序后每个数组求出可能的字典序最小情况。思路我们从字典序的比较上来考虑,并把\(A\)排序。首先考虑当前数组\(i\)的第一位......
  • GYM 103389 C
    题目描述有\(N\)个景点,第\(i\)个属于公司\(c_i\)。当你第一次路过一个属于公司\(i\)的景点时,你会获得\(w_i\)元。在景点之间有\(m\)条单向道路连接\(u,v(u<v)\)。一开始你在景点\(1\)。求到所有景点\(1\lei\leN\)时最多能获得多少元。思路由于公司数量很少,所......
  • GYM 104114 F
    题目描述有\(N\)个参赛选手,将进行\(N-1\)场比赛,第\(i,j\)个选手进行比赛有\(P_{i,j}\)的激烈程度。每当选手\(i\)打败选手\(j\)时,\(P_{i,x}\leftarrow\max(P_{i,x},P_{j.x})\)。在这些比赛中,编号小的选手总是打败编号大的选手。求最终\(N-1\)场比赛的激烈程度之和......
  • OpenAI Gym ProcGen - Getting Action Meanings
    题意:OpenAIGymProcGen-获取动作含义问题背景:IntheOpenAIProcGengym,Iamnotgettingaway togetthemeaningsoftheactionvalues,Icanseethatthereare15actionsforthecoinrunenvironmentusing env.action_space.n.IhavetriedboththeG......
  • GYM 105264 E
    题目描述给定一个\(N\)个点的树,你要从中选出一个大小为\(k\)的子树出来,求这个子树的最小直径。思路由于此题允许\(O(N^2)\)的时间复杂度,所以考虑枚举子树的中心。接着以该中心为根向下搜出深度为\(i\)的结点数\(cnt_i\),接着枚举直径长度除\(2\)。由于这里直径可能长......
  • GYM 105264 C
    题目描述给定一个长度为\(N\)的数组\(A\),每次你可以令\(A_i\leftarrowA_i+1\)或\(A_i-1\)。求进行至多\(k\)次操作后\(A\)中最少不同元素数量。思路首先对\(A\)进行排序。令\(dp_{i,j}\)表示考虑前\(i\)个数,有\(j\)个不同的值时最多还能剩余几次操作。很......
  • OpenAI Gym custom environment: Discrete observation space with real values
    题意:OpenAIGym自定义环境:具有实数值的离散观测空间问题背景:Iwouldliketocreatecustomopenaigymenvironmentthathasdiscretestatespace,butwithfloatvalues.Tobemoreprecise,itshouldbearangeofvalueswith0.25step:10.0,10.25,10.5,10......
  • Start OpenAI gym on arbitrary initial state
    题意:“在任意初始状态下启动OpenAIGym”问题背景:AnybodyknowsanyOpenAIGymenvironmentswherewecansettheinitialstateofthegame?Forexample,IfoundtheMountainCarContinuous-v0candosuchthingsothatwecanselectatwhichpointthecarst......
  • gym创建环境、自定义gym环境
    环境:half_cheetah.pyfromosimportpathimportnumpyasnpfromgymnasiumimportutilsfromgymnasium.envs.mujocoimportMujocoEnvfromgymnasium.spacesimportBoxDEFAULT_CAMERA_CONFIG={"distance":4.0,}classMOHalfCheetahEnv(Mujoc......
  • gym序列化、EzPickle类
    EzPickle是一个用于强化学习环境的类,它重写了__getstate__和__setstate__方法,以便通过构造函数参数(*args,**kwargs)进行序列化和反序列化。这个设计允许那些无法直接用pickle库处理的对象,如数据库连接和网络套接字,也能在保存和恢复时保持其状态。"""Classforpicklingandun......