CSES - Datatähti 2018 alku - Results
Submission details
Task:Merkkijono
Sender:Nanohenry
Submission time:2017-10-13 23:13:50 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:72:8: error: no match for 'operator<<' (operand types are 'std::istringstream {aka std::basic_istringstream<char>}' and 'uint64_t {aka long unsigned int}')
     ss << index;
        ^
input/code.cpp:72:8: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from input/code.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2753:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::basic_string<_CharT, _Traits, _Alloc>&)
     operator<<(basic_ostream<_CharT, _Traits>& __os,
     ^
/usr/include/c+...

Code

#include <iostream>
#include <sstream>
#define dt uint64_t
using namespace std;
inline dt getDigits(dt value) { // Max 64 bit: ~9000000000000000000
if (value < 10) {
return 1;
} else if (value < 100) {
return 2;
} else if (value < 1000) {
return 3;
} else if (value < 10000) {
return 4;
} else if (value < 100000) {
return 5;
} else if (value < 1000000) {
return 6;
} else if (value < 10000000) {
return 7;
} else if (value < 100000000) {
return 8;
} else if (value < 1000000000) {
return 9;
} else if (value < 10000000000) {
return 10;
} else if (value < 100000000000) {
return 11;
} else if (value < 1000000000000) {
return 12;
} else if (value < 10000000000000) {
return 13;
} else if (value < 100000000000000) {
return 14;
} else if (value < 1000000000000000) {
return 15;
} else if (value < 10000000000000000) {
return 16;
} else if (value < 100000000000000000) {
return 17;
} else if (value < 1000000000000000000) {
return 18;
}
return 19;
}
int main() {
dt amount;
cin >> amount;
dt *a = new dt[amount];
dt cur;
dt index;
dt size;
dt digits;
dt minus;
for (dt i = 0; i < amount; i++) {
cin >> a[i];
}
for (dt i = 0; i < amount; i++) {
cur = a[i];
index = 1;
size = 0;
digits = 0;
minus = 1;
istringstream ss;
for (; size <= cur; index++) {
digits = getDigits(index);
if (size + digits >= cur) {
ss << index;
} else {
minus += digits;
}
size += digits;
}
cout << ss.str().at(cur - minus) << '\n';
}
//while (1);
return 0;
}