概述
文章目录
- A. Equidistant Letters
- B. Minor Reduction
A. Equidistant Letters
题目链接:
A. Equidistant Letters
题目分析:
这道题的要求是,给定一个字符串,对其重新排列输出,排列方式为找出所有重复出现的字符,使得重复出现的字符间的间距都相等,例如abacbc,这里abc都有重复,我们只需让其变成这样abcabc或aabbcc,这些字符串之间,相同字符的间距都相同。
abcabc:两个a,两个b,两个c,它们之间的间距都为2
aabbcc:为1
我们只需找出一种并输出即可
通过观察我们发现,只要把重复出现的找出,把他们放在一起即可
代码如下:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int main(){
int n;
cin >> n;
while(n--){
char str[1005];
cin >> str;
int len = strlen(str);
int hash[26] = { 0 };
//将每种字符出现次数统计
for(int i = 0; i < len; i++){
hash[str[i] - 'a']++;
}
//按顺序输出
for(int i = 0; i < 26; i++){
for(int j = 0; j < hash[i]; j++){
printf("%c", i + 'a');
}
}
printf("n");
}
}
B. Minor Reduction
题目链接:
B. Minor Reduction
题目分析:
根据用例我们可以看出,所谓的归约其实就是将一个数,找出其中两个位置相邻的数字(单个数字),归约操作只执行一次,一个数有多种归约结果,我们找出规约后值最大的即可。
解决方案:
首先x的范围是10 - 10的20万次方如果x是两位数,那不必考虑,它的归约方式只有一种,其他位数的话我们则要分析一下:
- 首先两个个位数相加的结果一定是在0到18之间的
- 一次归约后,数字的长度最好的情况就是和原长一样
假如一个数所有相邻数的归约结果都小于10,那么我们就将最左边的两位数归约,因为:我们假设最两边的数为a,b,a+b<10,且a+b一定大于a,我们要保证高位上的数字最大。
假如一个数有相邻两个数归约结果>=10,说明他可以保证数字的长度不变,我们还是要保证较高位上的数字不变,而a + b的结果一定实1x,即高位上一定为1,而1是最小的数,我们要尽量将其靠近右边,所以我们只需找出最右边a+b>=10的情况,这就是最大的结果。
大家可以自己去打草稿分析一下。
代码如下:
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int n;
void solove(){
char s[200005];
cin >> s;
int len = strlen(s);
bool flag = true;//用来标记该数是否拥有能保持原本长度的归约情况
for(int i = len - 1; i >= 0; i--){//从左边开始,也就是低位数字
if(s[i] + s[i - 1] - '0' - '0'> 9){//判断是否有结果为两位数的归约情况
flag = false;//进行标记
for(int j = 0; j < len; j++){
if(j == i - 1){
printf("%d", s[i] + s[i - 1] - '0' - '0');
j++;
}
else{
printf("%c", s[j]);
}
}
break;
}
}
if(flag){//不存在上述情况则将前面两位数归约
printf("%d", s[0] + s[1] - '0' - '0');
char* p = s + 2;
printf("%s", p);
}
printf("n");
}
int main(){
cin >> n;
while(n--){
solove();
}
return 0;
}
最后
以上就是还单身红酒为你收集整理的Educational Codeforces Round 121 (Rated for Div. 2)A. Equidistant LettersB. Minor Reduction的全部内容,希望文章能够帮你解决Educational Codeforces Round 121 (Rated for Div. 2)A. Equidistant LettersB. Minor Reduction所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复