#include <iostream>
#include<bits/stdc++.h>
#define fo(i,start,end) for(int i=start;i<end;i++)
using namespace std;
int FindDigitSum(int num){
int sum = 0;
while(num > 0){
sum += (num%10);
num /= 10;
}
return sum;
}
int main() {
vector<int>arr = {12,33,6,51,85};
int n = arr.size();
// vector<int>DigitSum;
// DigitSum.reserve(n);
unordered_map<int,int>mp;
int MaxSumSeen = -1e9;
for(int i=0;i<n;i++){
int DigitSum = FindDigitSum(arr[i]);
if(mp.find(DigitSum) == mp.end()){
mp[DigitSum] = arr[i];
}
else{
// we need bigger values , dont replace from the map just find the max sum
int sum = arr[i] + mp[DigitSum];
MaxSumSeen = max(MaxSumSeen,sum);
if(arr[i] > mp[DigitSum]){
mp[DigitSum] = arr[i];
}
}
}
cout<<"Maximum Sum is :"<<MaxSumSeen<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKI2RlZmluZSBmbyhpLHN0YXJ0LGVuZCkgZm9yKGludCBpPXN0YXJ0O2k8ZW5kO2krKykKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBGaW5kRGlnaXRTdW0oaW50IG51bSl7CglpbnQgc3VtID0gMDsKCXdoaWxlKG51bSA+IDApewoJCXN1bSArPSAobnVtJTEwKTsKCQludW0gLz0gMTA7Cgl9CglyZXR1cm4gc3VtOwp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxpbnQ+YXJyID0gezEyLDMzLDYsNTEsODV9OwoJaW50IG4gPSBhcnIuc2l6ZSgpOwoJLy8gdmVjdG9yPGludD5EaWdpdFN1bTsKCS8vIERpZ2l0U3VtLnJlc2VydmUobik7Cgl1bm9yZGVyZWRfbWFwPGludCxpbnQ+bXA7CglpbnQgTWF4U3VtU2VlbiA9IC0xZTk7Cglmb3IoaW50IGk9MDtpPG47aSsrKXsKCQlpbnQgRGlnaXRTdW0gPSBGaW5kRGlnaXRTdW0oYXJyW2ldKTsKCQlpZihtcC5maW5kKERpZ2l0U3VtKSA9PSBtcC5lbmQoKSl7CgkJCW1wW0RpZ2l0U3VtXSA9IGFycltpXTsKCQl9CgkJZWxzZXsKCQkJCS8vIHdlIG5lZWQgYmlnZ2VyIHZhbHVlcyAsIGRvbnQgcmVwbGFjZSBmcm9tIHRoZSBtYXAganVzdCBmaW5kIHRoZSBtYXggc3VtCgkJCQlpbnQgc3VtID0gYXJyW2ldICsgbXBbRGlnaXRTdW1dOwoJCQkJTWF4U3VtU2VlbiA9IG1heChNYXhTdW1TZWVuLHN1bSk7CgkJCQlpZihhcnJbaV0gPiBtcFtEaWdpdFN1bV0pewoJCQkJCW1wW0RpZ2l0U3VtXSA9IGFycltpXTsKCQkJCX0KCQl9Cgl9Cgljb3V0PDwiTWF4aW11bSBTdW0gaXMgOiI8PE1heFN1bVNlZW48PGVuZGw7CglyZXR1cm4gMDsKfQ==