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 |
其实这道题对我这种菜鸟比较难,大神就别看了,代码如下。# include <cstdio> # include <iostream> const int R = 2147483647; const int Q = 31500; using namespace std; int len[Q + 100]; int num[Q + 100]; long long sum[Q + 100]; void init() { int i; for(i = 1; i < 10; i++) len[i] = 1; for(i = 10; i < 100; i++) len[i] = 2; for(i = 100; i < 1000; i++) len[i] = 3; for(i = 1000; i < 10000; i++) len[i] = 4; for(i = 10000; i < Q + 100; i++) len[i] = 5; num[1] = sum[1] = 1; for(i = 2; i < Q + 100; i++) { num[i] = num[i - 1] + len[i]; sum[i] = sum[i - 1] + num[i]; //cout << i << " " << sum[i] << endl; } } int bsearch1(int key) { int low, high; low = 1; high = Q; while(low <= high) { int middle = (low + high) >> 1; if(sum[middle] == key) return middle; if(sum[middle] < key) low = middle + 1; else high = middle - 1; } if(sum[low] <= key) return low; else return high; } int bsearch2(int key) { int low, high; low = 1; high = Q; while(low <= high) { int middle = (low + high) >> 1; if(num[middle] == key) return middle; if(num[middle] < key) low = middle + 1; else high = middle - 1; } if(num[low] <= key) return low; else return high; } int main(void) { init(); int N ,j ,k ,cnt2, y; cin >> N; while(N--) { cnt2 = 0; cin >> k; int n = bsearch1(k); int _num = k - sum[n]; // cout << n << " " << _num << endl; if(_num == 0) cout << n % 10 << endl; else { j = bsearch2(_num); int _num1 = _num - num[j]; int m = j + 1; // cout << j << " " << _num1 << " " << m << endl; while(m) { m /= 10; cnt2++; } m = j + 1; // cout << cnt2 << endl; if(num[m] == m) { cout << j << endl; //printf("...\n"); } else { int h = cnt2 - _num1 + 1; //cout << h << " " << endl; while(h--) { y = m % 10; m /= 10; } cout << y << endl; } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator