蓝桥杯 双周赛 第16场 强者赛 题目复盘 (2024年8月10日)

6. 花魁之争


解题思路:

根据题意,对于每一次操作,每个仙女来说都取最优解,那第一次每个仙女都操作一次,这时候胜出的仙女,是一定赢的。所以,只要计算n个字符串操作一次的最优字符串,然后,选出最小字符串有几个就是答案。

如何操作一次,支付串字典序最小?

  1. 存在这样的i和j,直接交换
    i < j && s i > s j
    sj尽量小的情况下j尽量大
  2. 存在两个相同的字符(容易漏掉)
  3. 交换最后两个字符(容易漏掉)
c 复制代码
#include <iostream>
#include<vector>
using namespace std;

const int N = 1e5 + 10;
vector<string> vs;
int n;
string cal(string &s) {
  vector<int> ps[26];
  int len = s.size();
  for (int i = 0; i < len; i++) {
    ps[s[i] - 'a'].push_back(i);
  }
  for (int i = 0; i < len; i++) {
    for (int j = 0; j < s[i] - 'a'; j++) {
      int tl = ps[j].size();
      if (tl && ps[j][tl - 1] > i) {
        swap(s[i], s[ps[j][tl - 1]]);
        return s;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    if (ps[i].size() > 1) return s;
  }
  swap(s[len - 1], s[len - 2]);
  return s;
}
int main()
{
  string s, mi = "";
  cin >> n;
  int ans = 0;
  for (int i = 0; i < n; i++) {
    cin >> s;
    s = cal(s);
   // cout << s <<endl;
    if (mi == "" || mi > s) {
      mi = s;
      ans = 1;
    }else if (mi == s) ans++;
  }
  cout << ans;
  return 0;
}
相关推荐
Lazionr23 分钟前
模板进阶:深入理解模板机制
c++·windows
ting94520007 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
豆沙沙包?7 小时前
C++~~~stack容器、queue容器、list容器(p45-P56)
c++·windows·list
吴声子夜歌7 小时前
Java面试——算法
java·算法·面试
Frank_refuel8 小时前
【C++八股】面向对象
开发语言·c++
h_a_o777oah8 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy8 小时前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2089 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲9 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
别动我齐刘海10 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶