Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

直接暴力解,变量不太好看。。。第一次贴

Posted by 1851494 at 2018-12-21 17:12:08 on Problem 1019
#include<stdio.h>
#define MAX 500000
int rank;
long long a[MAX+1],b[MAX+1];
int aim;
void binary_search(int s, int t) {
	if (s==t) {
		aim = s;
		return;
	}
	if (s == t - 1) {
		if (rank <= b[s])aim = s;
		else aim = t;
		return;
	}
	int mid = (s + t) / 2;
	if (rank>b[mid-1]&&rank<=b[mid]) {
		aim = mid;
		return;
	}
	else if (rank > b[mid]) {
		binary_search(mid + 1, t);
	}
	else {
		binary_search(s, mid - 1);
	}

}
int main() {

	int i, j;
	int shi = 10, interval = 1;
	b[0] = 0; a[0] = 0;
	for (i = 1; i <= MAX; i++) {
		a[i] = a[i - 1] + interval;
		b[i] = b[i - 1] + a[i];
		if ((i + 1) % shi == 0) {
			shi *= 10;
			interval++;
		}
	}
	int test_num;
	int nine;
	int wei, num, ppp, kkk;
	scanf_s("%d", &test_num);
	for (i = 0; i < test_num; i++) {
		scanf_s("%d", &rank);
		binary_search(0, MAX);
		rank -= b[aim - 1];
		nine = 9; j = 1;
		while (rank > a[nine] && nine <= aim) {
			nine = nine * 10 + 9;
			j++;
		}
		rank -= a[nine / 10];
		wei = (rank - 1) % j;
		wei = j - wei;
		num = (rank - 1) / j;
		ppp = 1;
		while (j > 1) {
			ppp *= 10;
			j--;
		}
		ppp += num;
		kkk = 1;
		while (wei > 0) {
			kkk *= 10;
			wei--;
		}
		printf("%d\n", (ppp%kkk) / (kkk / 10));
	}
	//system("pause");
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator