首页 > 其他分享 >fzu_noip 1032 (无穷数-进位判定)

fzu_noip 1032 (无穷数-进位判定)

时间:2022-10-25 10:31:42浏览次数:66  
标签:10 begin end noip search fzu k2 longint 1032


无穷数

时限:1s内存:32M

★问题描述:

我们生成两个无穷大的数,第一个数是把所有的自然数链接起来组成的数字;第二个数是把所有自然数的平方连接起来组成的数。对这两个数求和,如下:

 123456789101112131415161718192021...

+ 149162536496481100121144169196225...

= 272619325597593231536305887388246...

现在给你一个整数k,问和从左往右数第k位的数码是多少?

★数据输入:

输入数据有多组,每组数据输入一行,有一个数k。对于100%的数据,k<=2147483647

★结果输出:

对于每组数据,输出一个整数N,从左往右数第k位的数码。


输入示例

输出示例

5

6

7

8

1

9

3

2


 


先算出第k位的Ai和Bi,然后相加,考虑是否加过头。


接下来用search_fi(k:longint) 判断第k位是否会令前一位进位,则


fzu_noip 1032 (无穷数-进位判定)_数据




const
a:array[1..19,1..2] of int64=((1,3),(4,9),(10,31),(32,99),(100,316),(317,999),(1000,3162),(3163,9999),(10000,31622),(31623,99999),(100000,316227),(316228,999999),(1000000,3162277),(3162278,9999999),(10000000,31622776),(31622777,99999999),
(100000000,316227766),(316227767,999999999),(1000000000,2147483647));
var
k:longint;
function search_ai(k:longint):longint;
var
i,j,d,k2,g:int64;
begin
d:=1;i:=9;
while (true) do
begin
if (k-d*i>0) then
begin
dec(k,d*i);
i:=i*10;inc(d);
end
else break;
end;
k2:=i div 9+(k-1) div d;
g:=(k-1) mod d+1;
g:=d-g+1;
while (g>1) do begin k2:=k2 div 10;dec(g); end;
exit(k2 mod 10);
end;
{
function search_bi(k:longint):longint;
var
i,j:int64;
head:longint;
begin
head:=1;j:=10; i:=1;
while (i<=2147483647 ) do
begin
if ((i*i) div j>0) then
begin
write('(',head,',',i-1,')',',');
head:=i; j:=j*10;
end;
inc(i);
end;
end; }


function search_bi(k:longint):longint;
var
i:longint;
g,k2:int64;
begin
i:=1;
while (k>i*(a[i,2]-a[i,1]+1)) do
begin
dec(k,i*(a[i,2]-a[i,1]+1));
inc(i);
end;

k2:=(k-1) div i+1;
k2:=a[i,1]-1+k2;
k2:=k2*k2;
g:=(k-1) mod i+1;
g:=i-g+1;

while (g>1) do begin k2:=k2 div 10;dec(g); end;
exit(k2 mod 10);
end;
function search_fi(k:longint):longint;
var
i:longint;
begin
i:=search_ai(k)+search_bi(k);
if (i<=8) then exit(0)
else if (i>9) then exit(1)
else exit(search_fi(k+1));

end;
begin
// assign(output,'dabiao.out');
// rewrite(output);

while not eof do
begin
readln(k);
writeln((search_bi(k)+search_ai(k)+search_fi(k+1)) mod 10);


end;

// search_bi(1);
//close(output);
end.

标签:10,begin,end,noip,search,fzu,k2,longint,1032
From: https://blog.51cto.com/u_15724837/5794117

相关文章

  • fzu_noip 1036(磁盘碎片整理-Dp)
    磁盘碎片整理时限:1s内存:32M★问题描述:Jack最近在PS海报。海报所需各种素材不但让Jack头大,也让硬盘分区中的文件碎片越来越多,电脑的反应速度越来越慢。烦恼的Jack决定好好......
  • fzu_noip 1033 (作业问题-拼最大的2,3,5倍数)
    作业问题时限:1s内存:32M★问题描述:小T很喜欢数学,每天老师刚布置完作业,他就开始思考,今天他遇到了困难。现在有很多的数字,你的任务是找出由这些数字组成的最大的数,并且这个数......
  • fzu_noip 1039(盖楼-线段树)
    盖楼时限:1s内存:32M★问题描述:S举办了一场盖楼比赛,有n位选手参赛,将这n位选手编号为1到n。比赛刚开始时第i位选手的房子的初始高度为Ai,每过一天该选手的房子高度增加Bi。S想......
  • 0025:2011年NOIp普及组真题——瑞士轮题解
    题目链接:https://www.luogu.com.cn/problem/P1309如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分;这是因为每次比完赛会产生两个......
  • NOIP2014普及组复赛参考解析
    目录P2141[NOIP2014普及组]珠心算测验P2118[NOIP2014普及组]比例简化P2239[NOIP2014普及组]螺旋矩阵P2258[NOIP2014普及组]子矩阵题目传送P2141[NOIP2014......
  • P1850 [NOIP2016 提高组] 换教室
    [NOIP2016提高组]换教室题目描述对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有\(2n\)节课程安排在\(n\)个......
  • 题解 P5527 [Ynoi2012] NOIP2016 人生巅峰
    人生第一道Ynoi,同时也是1k通过。不卡常不难写,小清新Ynoi真的不多见了。前置知识:抽屉原理,树状数组,bitset,动态规划基础。首先考虑一个事实,当这个区间够长是必然有解的......
  • NOIP2015普及组复赛参考解析
    目录P2669[NOIP2015普及组]金币P2670[NOIP2015普及组]扫雷游戏P2671[NOIP2015普及组]求和P2672[NOIP2015普及组]推销员题目传送P2669[NOIP2015普及组]金......
  • NOIP2017 普及组复赛参考解析
    目录P3954[NOIP2017普及组]成绩P3955[NOIP2017普及组]图书管理员P3956[NOIP2017普及组]棋盘P3957[NOIP2017普及组]跳房子题目传送P3954[NOIP2017普及组]......
  • [NOIP2014 提高组] 联合权值 dfs+技巧
    题意树上每个结点的权值为\(w_i\),若点\(i\)和点\(j\)满足:\(i\)和\(j\)的最短距离为2,则会产生$w_i*w_j$的联合权值。求最大联合权值和联合权值之和。分析①最大联合......