acwing第66场周赛

1.判断奇偶

原题链接:https://www.acwing.com/problem/content/4609/

判断就就直接 %2即可

#include<iostream>

using namespace std;

int main()
{
    string s;
    for(int i = 0 ; i < 7 ; i ++) cin >> s;
    
    if(s[6] % 2) cout << 1;
    else cout << 0;
    
    return 0;
}

2.字母补全

原题链接:https://www.acwing.com/problem/content/4610/

(1).思路
思考暴力怎么写
看数据范围,思考暴力写的时间复杂度是否合理是否需要优化

暴力枚举,每一个字母往后枚举一个长度为26的片段
总的时间复杂度就是50000 * 26 < 1e8,这个时间复杂度是可行的

枚举这个片段中非?字符是否存在重复,如果重复就接着往下
如果不存在重复就将其补全输出
最终都没有方案就返回-1

(2).代码
#include<iostream>
#include<algorithm>
#include<unordered_set>

using namespace std;

int main()
{
    string s;
    cin >> s;
    
    unordered_set<char> hash;
    vector<char> lack;
    
    for(int i = 25; s[i]; i ++)
    {
        hash.clear();
        bool flag = true; // 表示非?字符中没有存在重复
        for(int j = i - 25; j <= i; j ++)
        {
            if(s[j] != '?' && hash.count(s[j]))
            {
                flag = false;
                break;
            }
            else hash.insert(s[j]);
        }
        if(flag) // 如果不存在重复就将?位置替换输出
        {
            lack.clear();
            for(char j = 'A'; j <= 'Z'; j ++)
            {
                if(hash.count(j) == 0) lack.push_back(j);
            }
            
            for(int j = i - 25,k = 0; j <= i; j ++)
            {
                if(s[j] == '?') s[j] = lack[k ++];
            }
            // 要将s串中所有的?都替换掉
            for(auto& c : s) if(c == '?') c = 'A';
            cout << s;
            
            return 0;
        }
    }
    puts("-1");
    return 0;
}
posted @ 2022-09-04 23:04  r涤生  阅读(9)  评论(0编辑  收藏  举报