| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
相当简单的 O(1) 算法!#include <cmath>
#include <iostream>
using namespace std;
typedef unsigned long L;
typedef unsigned short S;
S f(L i)
{
if (i <= 9) {
return i;
} else if (i <= 189) {
L j = (i + 10) / 2;
i -= (j * 2 - 10);
while (++i < 2) {
j /= 10;
}
return j % 10;
} else if (i <= 2889) {
L j = (i + 110) / 3;
i -= (j * 3 - 110);
while (++i < 3) {
j /= 10;
}
return j % 10;
} else if (i <= 38889) {
L j = (i + 1110) / 4;
i -= (j * 4 - 1110);
while (++i < 4) {
j /= 10;
}
return j % 10;
} else {
L j = (i + 11110) / 5;
i -= (j * 5 - 11110);
while (++i < 5) {
j /= 10;
}
return j % 10;
}
}
S g(L i)
{
if (i <= 45) {
L j = sqrtl(i * 2 - 1.75) - .5;
return f(i - (j + 1) * j / 2);
} else if (i <= 9045) {
L j = sqrtl(i - 21) + 4;
return f(i - (j - 8) * j - 36);
} else if (i <= 1395495) {
L j = (sqrtl(i * 6 - 17985.75) + 106.5) / 3;
return f(i - (j * 3 - 213) * j / 2 - 4887);
} else if (i <= 189414495) {
L j = sqrtl(i * .5 - 175385.4375) + 276.25;
return f(i - (j * 2 - 1105) * j - 503388);
} else {
L j = sqrtl(i * .4 - 15263847.51) + 2220.7;
return f(i - (j * 5 - 22207) * j / 2 - 50488389);
}
}
int main()
{
cin.tie(0);
ios_base::sync_with_stdio(false);
L i;
S t;
cin >> t;
while (t--) {
cin >> i;
cout << g(i) << '\n';
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator