首页 > 其他分享 >CF716B Complete the Word 题解

CF716B Complete the Word 题解

时间:2024-08-01 13:31:12浏览次数:9  
标签:子串 输出 Word CF716B 题解 st 枚举 ans

CF716B Complete the Word 题解

分析

首先观察数据范围是 \(50000\),可以考虑 \(O(n)\) 暴力。

在字符串中枚举子串开始的位置 \(i\),然后再枚举 \(i\) 到 \(i+25\),开个桶统计每个大写字母出现的次数,如果大于 \(1\) 就直接 break。统计完之后剩下的就都是问号了,可以随便填,所以这个子串是一定合法的。用 \(ans\) 来截取这一段合法子串,\(st\) 记录 \(ans\) 的起始位置,方便输出。如果所有子串都枚举完没有合法的,输出 \(-1\) 即可。

输出时没到子串 \(ans\) 时输出原串,问号随便输出。枚举到 \(st\) 时就输出 \(ans\),问号处缺啥填啥。

代码

代码过长,参考为主,不喜勿喷

#include <bits/stdc++.h>
using namespace std;
namespace Raiden
{
    int t[30];
    signed work()
    {
        string s, ans;
        int st;
        cin >> s;
        if (s.size() < 26)
            cout << -1 << endl, return 0;
        bool flag = 1;
        for (int i = 0; i <= s.size() - 26; i++)
        {
            flag = 1;
            memset(t, 0, sizeof(t));
            for (int j = i; j < i + 26; j++)
            {
                if (s[j] != '?')
                {
                    if (t[s[j] - 'A'] > 0)
                        flag = 0, break;
                    t[s[j] - 'A']++;
                }
            }
            if (flag)
            {
                ans = s.substr(i, 26);
                st = i;
                break;
            }
        }
        if (!flag)
            cout << -1 << endl, return 0;
        for (int i = 0; i < s.size(); i++)
        {
            if (i == st)
            {
                for (auto it : ans)
                {
                    if (it == '?')
                    {
                        for (int i = 0; i < 26; i++)
                            if (t[i] == 0)
                            {
                                cout << char(i + 'A');
                                t[i]++;
                                break;
                            }
                    }
                    else
                        cout << it;
                }
                i = st + 25;
            }
            else
            {
                if (s[i] == '?')
                    cout << 'A';
                else
                    cout << s[i];
            }
        }
        return 0;
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return Raiden::work();
}

标签:子串,输出,Word,CF716B,题解,st,枚举,ans
From: https://www.cnblogs.com/RyanAdam/p/18336468

相关文章

  • 转载:国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)
    windows系统也适用,该插件可同时支持windows和国产系统在实际项目开发中,以下场景可能会用到Word局部编辑功能:合同审批公文流转策划设计报告汇签单招投标(标书文件)其他,有模板且需要不同人员协作编辑的场景PageOffice使用表单模式docSubmitForm打开Word文件之后,只有设置了Editing......
  • P3043 [USACO12JAN] Bovine Alliance G 题解
    P3043[USACO12JAN]BovineAllianceG题目传送门思路首先分情况讨论每种联通块的可能,有三种不同的情况会对答案\(ans\)产生不同的贡献。联通块有环如图,因为每条边都有要有归属,所以环上的边只能全都顺时针或逆时针属于某个点,且不在环上的点仅有一种可能。因此该情况对答......
  • 题解:CF687C The Values You Can Make
    CF687CTheValuesYouCanMake题解题目翻译感觉不明不白的(至少我看了几遍没看懂),这里给个较为清晰的题面。题目描述给你\(n\)个硬币,第\(i\)个硬币有一个价值\(c_i\),你需要从中选出一些价值和为\(k\)的硬币组成一个集合,再输出这个集合中硬币可能组成的价值和。算法动......
  • 题解:CF559B Equivalent Strings
    CF559BEquivalentStrings题解题目描述吐槽一下,题目翻译有歧义。思路分析你会发现,当你需要判断字符串\(a,b\)是否等价时,如果长度为偶数,需要继续判断字符串\(a\)拆分的字串。所用知识s.substr(i,j)//在字符串s中,从位置i开始截取长度为j的字串参考代码#include<bits......
  • 题解:CF718A Efim and Strange Grade
    CF718AEfimandStrangeGrade题解算法贪心+模拟思路分析显然,要最优每一次进位就只能五入不能四舍。而且当我们五入时,要取位数最高的。比如说\(1.3535\),我们有两种进位方式,一种是进位成\(1.4\),一种是进位成\(1.354\),显然前者更优。那这道题给的次数有啥用呢?考虑一种“......
  • P10511 方差 题解
    【题目简述】定义一个长度为\(n\)的序列\(a\)的方差为:\(s^2=\frac{1}{n}\sum_{i=1}^n(a_i-\overline{a})^2\)。\(\sum\)为累加求和符号,\(\overline{a}\)为序列\(a\)的平均数。给定\(m\)个形如\([l,r,b]\)的组合,表示\(a_l,a_{l+1},\ldots,a_r\)为\(b\)。给定......
  • 洛谷P2696之慈善的约瑟夫——题解
    洛谷P2696题解[传送锚点](P2696慈善的约瑟夫-洛谷|计算机科学教育新生态(luogu.com.cn))比不过大佬,从蒟蒻做起选择比较水有意思的解法——用队列模拟(还是窝太弱了)正片开始考虑队列模拟,因为每次都是假的剔除,所以我们的目标是找到每回游戏的最终存活者。将不被剔除,......
  • 在AWS Lightsail建立WordPress Multisite & Route 53 subdomains & Hexo Blog & WordP
    1.0前言玩Startup比賽,因需高效快速地做POC原型產品,所以利用AWS云端服務來更快地開發。你會學到:LightSail建立WordpressmultisiteRoute53註冊WordpressSubdomains&GithubCuostomDomainLightSailCustomDomain&SSLHexo快速搭建GihubPages博客+ Route53 Custom......
  • 题解:Pinely Round 4 (Div. 1 + Div. 2) C
    C.AbsoluteZerotimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputYouaregivenanarray\(a\)of\(n\)integers.Inoneoperation,youwillperformthefollowingtwo-stepmove:Choose......
  • Word文档删除最后一页空白页的超强方法(亲测有效)
    我们在编辑word文档时经常会遇到word文档多出最后一页空白页,无论怎样backspace和delete都无法删除空白页。以下方式主要为删除分页符的方法来删除最后一页。一、在倒数第二页的结尾,点击“显示分节符”按钮。二、将光标移动到分节符的前面,使用delete键,分节符和最后一页空白页都......