首页 > 其他分享 >牛客15天刷题Day1_ZT6_小红的字符串构造

牛客15天刷题Day1_ZT6_小红的字符串构造

时间:2024-11-19 22:19:28浏览次数:1  
标签:std 字符 15 int Day1 牛客 匹配 tmp rightarrow

ZT6 小红的字符串构造

这是题面

构造 思维

思路

不用想得很复杂

可以看成一个匹配问题,每一个字符要和一个与自己不同得字符匹配,而且每一个字符都要匹配,每一个字符都要被匹配到

我们可以先用一个集合统计有多少种字符 \(set(s_1, s_2, s_3, \dots s_n)\),让所有字符都被匹配到,一种简单得方式就是每一个字符和它右边的字符匹配, 最后一个和第一个匹配,例如\(s_1\rightarrow s_2, s_3 \rightarrow s_4, \dots s_n \rightarrow s_1\)

最后别忘了特判不行的情况,也就是只有一种字符的情况

代码

#include <bits/stdc++.h>
#define endl '\n'
#define int long long

// 可以看成构造一个匹配,每个字母要和一个非自己的字符匹配
// 如何判断不行呢 只有一种字符的时候

void solve()
{
    std::unordered_map<char, char> mp;
    std::unordered_map<char, int> cnt;
    std::vector<char> tmp;
    std::string s;
    std::cin >> s;
    // 统计有几种字符
    for (int i = 0; i < (int)s.size(); i++)
    {
        if (cnt[s[i]])
        {
            continue;
        }
        cnt[s[i]]++;
        tmp.push_back(s[i]);
    }
    // 特判不行的情况
    int sz = tmp.size();
    if (sz == 1)
    {
        std::cout << -1 << endl;
        return;
    }
    // 做匹配
    for (int i = 0; i < sz; i++)
    {
        mp[tmp[i]] = tmp[(i + 1) % sz];
    }
    for (int i = 0; i < (int)s.size(); i++)
    {
        std::cout << mp[s[i]];
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    int t = 1;
    //std::cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}

标签:std,字符,15,int,Day1,牛客,匹配,tmp,rightarrow
From: https://www.cnblogs.com/SteinsGateSg/p/18555731

相关文章

  • 152页PPT管理咨询顾问能力进阶方法工具和模板(MCK出品)
    流程管理办法的总体步骤通常包括以下四个主要阶段:规划与梳理、设计与优化、实施与推广、执行与监控。这些步骤帮助组织在不同层面上优化和规范业务流程,提高效率,降低成本,确保流程的顺利运作。以下是每个阶段的详细解读:1.规划与梳理目标:明确流程管理的方向和目标,全面了解和分......
  • 20222315 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1、实验内容1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工具进行搜集......
  • Educational Codeforces Round 156 (Rated for Div. 2) - VP记录
    A.SumofThree枚举即可,是否可行只与\(a,b,c\)模三的余数有关,所以随便小范围枚举一下\(a,b\)就行了(只枚举\(1,2,3\)可能会因为两数相同而误判),这样最不容易错。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intT;scanf("%d",&T); while(T--) ......
  • cmu15545笔记-查询优化(Query Optimization)
    目录概述Heuristics/RulesCost-basedSearchSinglerelationMutiplerelationGenertive/Bottom-UpTransformation/Top-DownNestedsub-queriesDecomposingQueriesExpression/QueriesRewritingStatistics概述数据库系统的执行流程:从优化器到磁盘所设计的步骤:查询......
  • 基于MPC、PID、 ode15s的无人机开发模型预测控制研究(Matlab代码实现)
            ......
  • Oracle数据库安全扫描1158/3938端口出现弱SSL加密算法解决方法之一
    问题复述某国企项目现场反应安全扫描出部署某历史项目的Windows服务器上的1158及3938两个端口出现了弱SSL加密算法漏洞,要求整改。经过核实,该Windows服务器上部署了tomcat与Oracle11g数据库,其中1158和3938两个端口均为Oracle数据库所使用。处理思路确认1158和3938作用:如果没......
  • [20241115]大量软解析相关等待事件分析(21c).txt
    [20241115]大量软解析相关等待事件分析(21c).txt--//测试看看应用程序大量软解析导致的相关等待事件,主要原因上午测试librarycachebucket的muext值的前4个字节,在软解析时会--//出现挂起的情况,其他地方也应该出现类似情况,测试看看主要出现在那里等待事件。1.环境:SCOTT@book01p>......
  • CF715B Complete The Graph 题解
    Description给\(n\)点\(m\)边的无向图,\(L\),\(s\),\(t\)。修改\(m\)条边中边为\(0\)的边,使满足\(s,t\)的最短路长度是\(L\),且输出答案的时候边为\(0\)的边的权值必须在\([1,10^{18}]\)内。Solution考虑怎么判有无解。容易发现将所有未知边边权设为\(10^{18}\),......
  • 代码随想录算法训练营第七天(LeetCode454.四数相加Ⅱ;LeetCode383.赎金信;LeetCode15.三
    LeetCode454.四数相加Ⅱ题目链接:四数相加Ⅱ题目链接思路这道题目给定我们四个数组,让我们判断从四个数组中分别取一个元素,然后将这四个元素相加,值为0的元组个数,所以我们可以模仿两数之和,因为四个数组中分别取元素就是任意取,不需要考虑去重的问题,所以可以将四个数组转......
  • 牛客周赛 Round 67 A~F
    牛客周赛Round67A~F题解目录牛客周赛Round67A~F题解Preface所有代码前面的火车头ProblemA.排序危机ProblemB.小歪商店故事:卷ProblemC.小苯的计算式ProblemD.KProblemE.小苯的区间选数ProblemF.小Z的树迁移PostScriptPreface好久没v过牛客周赛了,但估计这场强度不高......