蒜头君这天正在学习字典序排序,很想研究一下稳定排序的内部构造,所以他定义了一个代价,代价表示为 排序前字符的下标与排序后字符的下标之差的绝对值。现在有一个字符串,按照字典序 从小到大 进行排序,蒜头君通过计算串中所有的代价和了解到这个稳定排序的整个代价。请你设计一个程序,计算整个稳定排序的代价。
输入格式
输入共计 11 行:包含一个字符串 SS,其中字符串长度 lenlen(1\leq len \leq 10001≤len≤1000)
输出格式
输出共计 11 行,包含 11 个数,表示整个字符串内部按照字典序稳定排序后的代价和
这里面要注意的一点就是如果有相同的那我们找到的字符就要找过的下一个出现的位置
if (str[i] == str[i - 1]) {
sum = x + 1;
} else {
sum = 0;
}
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
string s;
cin >> s;
string str(s);
sort(str.begin(), str.end());
int anx = 0;
int sum, x;
char c;
for (int i = 0; i < s.size(); i++) {
c = str[i];
if (str[i] == str[i - 1]) {
sum = x + 1;
} else {
sum = 0;
}
x = s.find(c, sum);
anx += abs(i - x);
}
cout << anx;
return 0;
}