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

6. 花魁之争


解题思路:

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

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

  1. 存在这样的i和j,直接交换
    i < j && s[ i ] > s[ j ]
    s[j]尽量小的情况下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;
}
相关推荐
Coovally AI模型快速验证22 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
一只小bit25 分钟前
C++之初识模版
开发语言·c++
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨1 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
CodeClimb1 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
BoBoo文睡不醒2 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
北顾南栀倾寒3 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
CM莫问3 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别