Я решал проблему, QuestionsLink , где нам дают имя вместе с целым числом. Вы должны напечатать три имени с максимальными целочисленными значениями.
Итак, я преобразовал число в строку и конкатенировал его перед именами. После сортировки я получал желаемые результаты. Но он провалил некоторые тестовые случаи, и мне стало интересно, как работает функция сортировки в c ++.
Вот мой код:
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
int main() {
ll n;
cin >> n;
string names[n];
int arr[n], digits[n];
for (int i = 0; i < n; i++) {
cin >> names[i] >> arr[i];
names[i] = to_string(arr[i]) + names[i];
}
for (int i = 0; i < n; i++) {
digits[i] = floor(log10(arr[i]) + 1);
}
sort(names, names + n, greater<string>());
for (int i = 0; i < n; i++) {
cout << names[i] << endl;
}
/*for(int i=0;i<3;i++){
string s = names[i].substr(digits[i],names[i].length());
cout<<s<<endl;
}
cout<<digits[98];
*/
return 0;
}
Контрольные примеры:
9huDmy
995YnAYoAEE
990RUTM
96ipORo
956LNjFa
Итак, после сортировки по убыванию, как 9huDmy сверху, в то время как следующие два отсортированы на основе цифр перед ними.