锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include <cstdio>
2
#include <cmath>
3
const int MAX = 20;
4
5
__int64 arr_bit[MAX]; //璁板綍i涓綅鏈夊嚑涓洖鏂囨暟
6
char strNum[50]; //淇濆瓨緇撴灉
7
8
void Cal()
9

{
10
int i, j;
11
__int64 t;
12
13
arr_bit[1] = 9;
14
15
for ( i = 2; i <= MAX; ++i )
16
{
17
arr_bit[i] = arr_bit[i - 1];
18
t = 9;
19
for ( j = 0; j < (i >> 1) - 1; ++j )
20
t *= 10;
21
if ( i % 2 != 0 )
{
22
t *= 10;
23
}
24
arr_bit[i] += t;
25
}
26
}
27
28
void GetNum(const __int64& n)
29

{
30
//瀵瑰皯浜?00鐨勬暟鐩存帴杈撳嚭
31
if ( n <= 9 )
32
{
33
printf("%I64d\n", n);
34
}
35
else if ( n <= 18 )
36
{
37
printf("%I64d%I64d\n", (n - 9), (n - 9));
38
}
39
else
{
40
int i, pos, wh, t, k;
41
__int64 del;
42
43
//鎵懼嚭褰撳墠鏁版湁澶氬皯涓綅
44
for ( i = 3; i <= MAX; ++i )
45
{
46
if ( arr_bit[i] >= n )
47
{
48
pos = i;
49
break;
50
}
51
}
52
53
//pos涓綅鐨勭鍑犱釜
54
del = n - arr_bit[pos - 1] - 1;
55
56
wh = pos >> 1;
57
58
if ( pos % 2 == 0 )
{
59
wh--;
60
}
61
62
//紜畾姣忎釜浣?/span>
63
t = (int)pow(10, wh);
64
strNum[0] = strNum[pos - 1] = (int)(del / t) + 1 + '0';
65
del = del % t;
66
67
for ( i = wh - 1, k = 1; i >= 0; --i, ++k )
68
{
69
t = (int)pow(10, i);
70
strNum[k] = strNum[pos - k - 1] = (int)(del / t) + '0';
71
del = del % t;
72
}
73
74
strNum[pos] = '\0';
75
76
printf("%s\n", strNum);
77
78
}
79
80
}
81
82
int main()
83

{
84
__int64 n;
85
86
Cal();
87
88
while ( true )
89
{
90
scanf("%I64d", &n);
91
92
if ( n == 0 )
93
break;
94
95
GetNum(n);
96
}
97
return 0;
98
}
99
100
101
102
]]>
鏃犵┓閫艱繎姝g‘絳旀錛屾渶鍚庡氨鏄紜瓟妗?img height=20 src="http://m.shnenglu.com/Emoticons/QQ/noidea.gif" width=20 border=0>
#include <cstdio>
#include <algorithm>
const int SIZE = 50002 ;
int length , N , M ;
int distance[SIZE] ;
bool Judge(const int& value)

{
int num , i , pre ;
num = 0 ;
pre = 0 ;
for ( i = 0 ; i < N ; ++i )
{
if ( distance[i] - pre < value )
num++ ;
else
pre = distance[i] ;
}
if ( length - pre < value )
num++ ;
if ( num <= M )
return true ;
else
return false ;
}
int BiSearch()

{
int ans = 0 ;
int mid , left = 0 , right = length ;
while ( left <= right )
{
mid = (left + right) >> 1 ;
if ( Judge(mid) )
left = mid + 1 ;
else
right = mid - 1 ;
}
ans = left - 1 ;
return ans ;
}
int main()

{
// freopen("1.txt", "r", stdin) ;
int i ;
char strNum[12] ;
scanf("%d %d %d", &length, &N, &M) ;
getchar() ;
for ( i = 0 ; i < N ; ++i )
{
// scanf("%d", &distance[i]) ;
gets(strNum) ;
distance[i] = atoi(strNum) ;
}
std::sort(distance, distance + N) ;
printf("%d\n", BiSearch()) ;
return 0 ;
}