本题我无耻地使用了打表,然后找出了规律,最后用了if-else作弊过的。。附上AC和打表代码,为了追求效率还把本来AC的python代码改成了C。。真是蛋疼无比
#include<stdio.h>
int main()
{
int num;
while (scanf("%d", &num) != EOF)
{
if (num < 3)
putchar('1');
else if (num < 10)
putchar('3');
else if (num < 26)
putchar('0');
else if (num < 90)
putchar('6');
else if (num < 264)
putchar('0');
else if (num < 947)
putchar('6');
else if (num < 3008)
putchar('9');
else if (num < 37174)
putchar('0');
else
putchar('7');
putchar('\n');
}
return 0;
}
打表代码,要跑个10几分钟。。慎运行
def end_index(src, number):
length = len(src)
low = 0
high = length - 1
center = (low + high) / 2
while(src[center][1] != number):
if(src[center][1] > number):
high = center
else:
low = center
center = (low + high) / 2
while(src[center][1] == number):
center += 1
if center == length:
break
return center - 1
src = []
for i in range(1, 100000):
for j in list(str(i)):
temp = []
temp.append(j)
temp.append(i)
src.append(temp)
f = open('../output.txt', 'w')
s = ''
for num in range(1, 100001):
sublist = src[:end_index(src, num) + 1]
even = True
while(len(sublist) != 1):
begin = 1 if even else 0
del sublist[begin::2]
even = not even
s += str(sublist[0][0])
if num % 1000 == 0:
f.write(s)
f.write('\n')
s = ''
f.flush()
f.close()

327

被折叠的 条评论
为什么被折叠?



