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;
}
rds_blogs