Дана последовательность, состоящая из «I» и «D», где «I» обозначает возрастающую последовательность, а «D» обозначает убывающую последовательность. Напишите программу, которая декодирует данную последовательность, чтобы построить минимальное число без повторяющихся цифр. Цифры должны начинаться с 1, т.е. нулей быть не должно.
Input: D Output: 21
Input: I Output: 12
Input: DD Output: 321
Input: II Output: 123
Input: DIDI Output: 21435
Input: IIDDD Output: 126543
Input: DDIDDIID Output: 321654798
Мой python код работает. Я перевел его на C ++, но версия на C ++ не работает. Я не понимаю, почему.
Python код (работает):
s = input()
ans = [1]
count = 0
for i in s:
if i == 'I':
count = 0
k = len(ans)
ans.append(k + 1)
else:
count += 1
tmp = ans[-1]
for i in range(-1, -1 - count, -1):
ans[i] += 1
ans.append(tmp)
for i in ans:
print(i, end = "")
код C ++ (не работает, т.е. не дает правильного вывода)
#include <bits/stdc++.h>
using namespace std;
vector<int> digits(string s){
vector<int> ans = {1};
int count = 0;
for (char const &c : s){
if (c == 'I'){
count = 0;
int k = ans.size();
ans.push_back(k + 1);
}
else{
count ++;
int tmp = ans.back();
for (int i = ans.size() - 1; i > ans.size() - 1 - count; i--){
ans[i] += 1;
}
ans.push_back(tmp);
}
}
return ans;
}
int main(){
string s;
cin >> s;
vector<int> ans = digits(s);
for (int i = 0; i < ans.size(); i++){
cout << ans[i];
}
return 0;
}
Например, когда я ввожу DD в код C ++, он дает 111, но должен вывести 321.