1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | #include <string> const char digit_pairs[201] = { "00010203040506070809" "10111213141516171819" "20212223242526272829" "30313233343536373839" "40414243444546474849" "50515253545556575859" "60616263646566676869" "70717273747576777879" "80818283848586878889" "90919293949596979899" }; std::string& itostr(int n, std::string& s) { if(n==0) { s="0"; return s; } int sign = -(n<0); unsigned int val = (n^sign)-sign; int size; if(val>=10000) { if(val>=10000000) { if(val>=1000000000) size=10; else if(val>=100000000) size=9; else size=8; } else { if(val>=1000000) size=7; else if(val>=100000) size=6; else size=5; } } else { if(val>=100) { if(val>=1000) size=4; else size=3; } else { if(val>=10) size=2; else size=1; } } size -= sign; s.resize(size); char* c = &s[0]; if(sign) *c='-'; c += size-1; while(val>=100) { int pos = val % 100; val /= 100; *(short*)(c-1)=*(short*)(digit_pairs+2*pos); c-=2; } while(val>0) { *c--='0' + (val % 10); val /= 10; } return s; } std::string& itostr(unsigned val, std::string& s) { if(val==0) { s="0"; return s; } int size; if(val>=10000) { if(val>=10000000) { if(val>=1000000000) size=10; else if(val>=100000000) size=9; else size=8; } else { if(val>=1000000) size=7; else if(val>=100000) size=6; else size=5; } } else { if(val>=100) { if(val>=1000) size=4; else size=3; } else { if(val>=10) size=2; else size=1; } } s.resize(size); char* c = &s[size-1]; while(val>=100) { int pos = val % 100; val /= 100; *(short*)(c-1)=*(short*)(digit_pairs+2*pos); c-=2; } while(val>0) { *c--='0' + (val % 10); val /= 10; } return s; } #include <iostream> #include <climits> int main(void) { std::string s; int j; for(j=10; j<1e9; j*=-3) { itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); } j = INT_MIN; itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); j = INT_MAX; itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); int i = 0; i += itostr(INT_MIN, s).size(); i += itostr(INT_MAX, s).size(); i += itostr(unsigned(INT_MAX) + 1U, s).size(); i += itostr(unsigned(~0), s).size(); char c = CHAR_MIN; do { i += itostr(c, s).size(); i += itostr((11111111 * c), s).size(); if (c >= CHAR_MAX) break; c++; } while (1); while (i < 500000000) i += itostr(i, s).size(); std::cout << i << std::endl; return i; } |
I2luY2x1ZGUgPHN0cmluZz4KCmNvbnN0IGNoYXIgZGlnaXRfcGFpcnNbMjAxXSA9IHsKICAiMDAwMTAyMDMwNDA1MDYwNzA4MDkiCiAgIjEwMTExMjEzMTQxNTE2MTcxODE5IgogICIyMDIxMjIyMzI0MjUyNjI3MjgyOSIKICAiMzAzMTMyMzMzNDM1MzYzNzM4MzkiCiAgIjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5IgogICI1MDUxNTI1MzU0NTU1NjU3NTg1OSIKICAiNjA2MTYyNjM2NDY1NjY2NzY4NjkiCiAgIjcwNzE3MjczNzQ3NTc2Nzc3ODc5IgogICI4MDgxODI4Mzg0ODU4Njg3ODg4OSIKICAiOTA5MTkyOTM5NDk1OTY5Nzk4OTkiCn07CgoKc3RkOjpzdHJpbmcmIGl0b3N0cihpbnQgbiwgc3RkOjpzdHJpbmcmIHMpCnsKICAgIGlmKG49PTApCiAgICB7CiAgICAgICAgcz0iMCI7CiAgICAgICAgcmV0dXJuIHM7CiAgICB9CiAKICAgIGludCBzaWduID0gLShuPDApOwogICAgdW5zaWduZWQgaW50IHZhbCA9IChuXnNpZ24pLXNpZ247CgogICAgaW50IHNpemU7CiAgICBpZih2YWw+PTEwMDAwKQogICAgewogICAgICAgIGlmKHZhbD49MTAwMDAwMDApCiAgICAgICAgewogICAgICAgICAgICBpZih2YWw+PTEwMDAwMDAwMDApCiAgICAgICAgICAgICAgICBzaXplPTEwOwogICAgICAgICAgICBlbHNlIGlmKHZhbD49MTAwMDAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT05OwogICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgc2l6ZT04OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZih2YWw+PTEwMDAwMDApCiAgICAgICAgICAgICAgICBzaXplPTc7CiAgICAgICAgICAgIGVsc2UgaWYodmFsPj0xMDAwMDApCiAgICAgICAgICAgICAgICBzaXplPTY7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNpemU9NTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIAogICAgewogICAgICAgIGlmKHZhbD49MTAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMDAwKQogICAgICAgICAgICAgICAgc2l6ZT00OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaXplPTM7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmKHZhbD49MTApCiAgICAgICAgICAgICAgICBzaXplPTI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNpemU9MTsKICAgICAgICB9CiAgICB9CiAgICBzaXplIC09IHNpZ247CiAgICBzLnJlc2l6ZShzaXplKTsKICAgIGNoYXIqIGMgPSAmc1swXTsKICAgIGlmKHNpZ24pCiAgICAgICAgKmM9Jy0nOwoKICAgIGMgKz0gc2l6ZS0xOwogICAgd2hpbGUodmFsPj0xMDApCiAgICB7CiAgICAgICBpbnQgcG9zID0gdmFsICUgMTAwOwogICAgICAgdmFsIC89IDEwMDsKICAgICAgICooc2hvcnQqKShjLTEpPSooc2hvcnQqKShkaWdpdF9wYWlycysyKnBvcyk7IAogICAgICAgYy09MjsKICAgIH0KICAgIHdoaWxlKHZhbD4wKQogICAgewogICAgICAgICpjLS09JzAnICsgKHZhbCAlIDEwKTsKICAgICAgICB2YWwgLz0gMTA7CiAgICB9CiAgICByZXR1cm4gczsKfQoKc3RkOjpzdHJpbmcmIGl0b3N0cih1bnNpZ25lZCB2YWwsIHN0ZDo6c3RyaW5nJiBzKQp7CiAgICBpZih2YWw9PTApCiAgICB7CiAgICAgICAgcz0iMCI7CiAgICAgICAgcmV0dXJuIHM7CiAgICB9CiAKICAgIGludCBzaXplOwogICAgaWYodmFsPj0xMDAwMCkKICAgIHsKICAgICAgICBpZih2YWw+PTEwMDAwMDAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMDAwMDAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT0xMDsKICAgICAgICAgICAgZWxzZSBpZih2YWw+PTEwMDAwMDAwMCkKICAgICAgICAgICAgICAgIHNpemU9OTsKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgIHNpemU9ODsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMDAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT03OwogICAgICAgICAgICBlbHNlIGlmKHZhbD49MTAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT02OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaXplPTU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICBpZih2YWw+PTEwMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHZhbD49MTAwMCkKICAgICAgICAgICAgICAgIHNpemU9NDsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2l6ZT0zOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZih2YWw+PTEwKQogICAgICAgICAgICAgICAgc2l6ZT0yOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaXplPTE7CiAgICAgICAgfQogICAgfQoKICAgIHMucmVzaXplKHNpemUpOwogICAgY2hhciogYyA9ICZzW3NpemUtMV07CiAgICB3aGlsZSh2YWw+PTEwMCkKICAgIHsKICAgICAgIGludCBwb3MgPSB2YWwgJSAxMDA7CiAgICAgICB2YWwgLz0gMTAwOwogICAgICAgKihzaG9ydCopKGMtMSk9KihzaG9ydCopKGRpZ2l0X3BhaXJzKzIqcG9zKTsgCiAgICAgICBjLT0yOwogICAgfQogICAgd2hpbGUodmFsPjApCiAgICB7CiAgICAgICAgKmMtLT0nMCcgKyAodmFsICUgMTApOwogICAgICAgIHZhbCAvPSAxMDsKICAgIH0KICAgIHJldHVybiBzOwp9CgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjbGltaXRzPgppbnQgbWFpbih2b2lkKQp7CiAgICAgICAgc3RkOjpzdHJpbmcgczsKCWludCBqOwoJZm9yKGo9MTA7IGo8MWU5OyBqKj0tMykKCXsKCQlpdG9zdHIoaiwgcyk7CgkJcHJpbnRmKCIlZCAnJXMnICVkXG4iLCBqLCBzLmNfc3RyKCksIHMuc2l6ZSgpKTsKCX0KCWogPSBJTlRfTUlOOwoJaXRvc3RyKGosIHMpOwoJcHJpbnRmKCIlZCAnJXMnICVkXG4iLCBqLCBzLmNfc3RyKCksIHMuc2l6ZSgpKTsKCWogPSBJTlRfTUFYOwoJaXRvc3RyKGosIHMpOwoJcHJpbnRmKCIlZCAnJXMnICVkXG4iLCBqLCBzLmNfc3RyKCksIHMuc2l6ZSgpKTsKCiAgICBpbnQgaSA9IDA7CiAgICBpICs9IGl0b3N0cihJTlRfTUlOLCBzKS5zaXplKCk7CiAgICBpICs9IGl0b3N0cihJTlRfTUFYLCBzKS5zaXplKCk7CgogICAgaSArPSBpdG9zdHIodW5zaWduZWQoSU5UX01BWCkgKyAxVSwgcykuc2l6ZSgpOwogICAgaSArPSBpdG9zdHIodW5zaWduZWQofjApLCBzKS5zaXplKCk7IAoKCWNoYXIgYyA9IENIQVJfTUlOOwoJZG8gewoJCWkgKz0gaXRvc3RyKGMsIHMpLnNpemUoKTsKICAgICAgICAgICAgICAgIGkgKz0gaXRvc3RyKCgxMTExMTExMSAqIGMpLCBzKS5zaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKGMgPj0gQ0hBUl9NQVgpIGJyZWFrOwoKCQljKys7Cgl9IHdoaWxlICgxKTsKCiAgICB3aGlsZSAoaSA8IDUwMDAwMDAwMCkKICAgICAgICBpICs9IGl0b3N0cihpLCBzKS5zaXplKCk7CgogICAgc3RkOjpjb3V0IDw8IGkgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiBpOwp9
-
upload with new input
-
result: Success time: 1.9s memory: 2860 kB returned value: 1
10 '10' 2 -30 '-30' 3 90 '90' 2 -270 '-270' 4 810 '810' 3 -2430 '-2430' 5 7290 '7290' 4 -21870 '-21870' 6 65610 '65610' 5 -196830 '-196830' 7 590490 '590490' 6 -1771470 '-1771470' 8 5314410 '5314410' 7 -15943230 '-15943230' 9 47829690 '47829690' 8 -143489070 '-143489070' 10 430467210 '430467210' 9 -1291401630 '-1291401630' 11 -420762406 '-420762406' 10 -2147483648 '-2147483648' 11 2147483647 '2147483647' 10 500000001


