2019noip复赛模拟练习18 答案

发布 2023-05-21 10:33:28 阅读 7529

1. tom有一个无穷序列中如下:110100100010000100000。。。

请你帮助tom找出在这个无穷序列中指定位置上的数字。

输入格式 input format

第一行一个正整数n,表示询问的次数;

接下来的n行一个正整数ai,ai表示在序列中的位置。

输出格式 output format

n行,每一行为0或1,表示序列第ai位上的数字。

对于100%的数据有n<=1500000,ai<=10^9

var n,i:longint;

x,z,y:int64;

begin readln(n);

for i:=1 to n do begin

readln(x); z:=(x-1)*2; y:=trunc(sqrt(z));

if z=y*(y+1) then writeln('1') else writeln('0');

end;readln;readln;

end.输入 3

输出0 0 1

输入 5 7 1024 15 10000 4 输出 1 0 0 0 1

2. 输入一个正整数n(1 <=n <=20)后,可以得到一个n*n的数字螺旋方阵,分别求该方阵中的主对角线与副对角线上的数字之和s,p,输出s、p的差。

例如:n=5 得到的数字螺旋方阵如下:

1 2 3 4 5其中:主对角线从左上角到右下角,得到。

16 17 18 19 6的数字之和为:s=1+17+25+21+9=73

15 24 25 20 7副对角线从右上角到左下角,得到。

14 23 22 21 8的数字之和:p=5+19+25+23+13=85

13 12 11 10 9 s-p= -12

input 一个正整数n

output主对角线与副对角线上的数字之和的差。

sample input 5

sample output -12

var n,i,j,t,f,l,q,z:integer;s1,s2:longint;

a:array[1..20,1..20] of integer;

beginreadln(n);

t:=1; f:=1; l:=n;i:=1;q:=1;z:=n;

while t<=n*n do

begincase f of

1:begin

for j:=q to z do begin a[i,j]:=t;inc(t);end;

f:=2; q:=i+1;dec(l); z:=l+q-1;

end;2:begin

for i:=q to z do begin a[i,j]:=t;inc(t);end;

f:=3;q:=j-1; z:=q-l+1;

end;3:begin

for j:=q downto z do begin a[i,j]:=t;inc(t); end;

f:=4;q:=i-1;dec(l);z:=q-l+1;

end;4:begin

for i:=q downto z do begin a[i,j]:=t;inc(t); end;

f:=1;q:=j+1;z:=q+l-1;

end;end;

end;s1:=0;s2:=0;

for i:=1 to n do s1:=s1+a[i,i];

for i:=n downto 1 do s2:=s2+a[n-i+1,i];

writeln(s1-s2);

end. 输入 7 输出 -24输入 20 输出 -200 输入 12 输出-72

15 输出 -112

3.字母a,b,c的所有可能的组合(按字典顺序排序)是:

a, ab,abc,ac,b,bc,c

每个组合都对应一个字典顺序的序号,如下所示:1a2ab

3abc4ac5b6bc

7c找出某个字母组合的字典序号。例如,上例中ac的字典序号是4。

注:假设某个字母组合为x1x2x3…xk,保证x1 输入:输入包括2行:

第一行:n,表示字母组合由字母表中前n(n<=26)个字母组成;

第二行:某一个字母组合,都是大写字母;

输出:该字母组合的序号;输入样例:

ab输出样例: 2

f[i]表示为i位的总方案数,每读一位就累加。

var n,i,j,tot:longint;

f:array[0..27] of longint;

a:array[0..26] of char;

c:char;

beginfillchar(f,sizeof(f),0);

readln(n);

for i:=n downto 1 do

beginfor j:=i+1 to n do f[i]:=f[i]+f[j];

inc(f[i]);

end;tot:=0; j:=0; a[0]:=

while not eoln do

begininc(j); read(a[j]);

for i:=ord(a[j-1])-64+1 to ord(a[j])-64-1 do

tot:=tot+f[i];

inc(tot);

end;writeln(tot);

end.二进制数n mod m的结果是多少?

输入数据。第一行输入一个二进制数n。

第二行输入一个二进制数m。

输出数据。输出n mod m的结果。输入样例。

输出样例。

数据规模。n的长度(二进制数的位数)<=200 000;

m的长度(二进制数的位数)<=20。

与10进制的高精同理,10进制每次乘10,进制每次乘2.

program fdfd;

var a,ans:array[0..200000] of longint;

b,i,r:longint;

c:char;

begina[0]:=0;

while not eoln do

beginread(c);

inc(a[0]);

a[a[0]] ord(c)-48;

end; readln;

b:=0;while not eoln do

beginread(c);

b:=b*2+ord(c)-48;

end;r:=0;

for i:=1 to a[0] do

r:=(r*2+a[i])mod b ;

ans[0]:=0;

repeat

inc(ans[0]);

ans[ans[0]]:r mod 2;

r:=r div 2;

until r=0;

for i:=ans[0] downto 1 do

write(ans[i]);

writeln;

end.输入 1110001111

1111100 输出 101011

输入 111111000000011111

111110001111 输出 110001011111

4. 镇里举办贪吃比赛,一共比赛n天,规定:每次吃的必须比上次多,一天只能吃一次(撑死。吃的天数最多的人将获得胜利,获得10000000000 mod 10

的奖金^_^

现在,sally要参加比赛,她邀请参加oi的你一起帮忙,胜利后七三分成^_^

输入格式。第一行一个数n,表示吃的天数(n<=10000)

第二行n个数,表示每天能吃的数量(数量最多10000)

输出格式。一个数,表示最多吃的天数。

程序如下。program eat;

varn,i,j,k,m:integer;

a:array[0..10000] of integer;

s:array[0..10001]of integer;

beginreadln(n);

for i:=1 to n do

read(a[i]);

a[0]:=100;

for i:=1 to n do

begin

2019noip复赛模拟练习29 答案 要点

辉辉 姗姗和佳佳是好朋友,他们一起参加了在湖南长沙长郡中学举办的第二十一届全国青少年信息学奥林匹克竞赛 noi2004 他们很早就来到了长沙,可是报名还没有开始。怎么办呢?他们决定分头出去玩一天,晚上回到宿舍以后给大家说说自己这一天做了什么有意义的事情。你一定想不到辉辉干嘛去了 他睡了一天。他想 比...

2019noip普及组初赛试题 c语言

第十七届全国青少年信息学奥林匹克联赛初赛试题 普及组 c 语言两小时完成 一 单项选择题 共 20 题,每题 1.5 分,共计 30 分。每题有且仅有一个正确选项。1 在二进制下,1100100 1110001 a.1011 b.1101 c.1010 d.1111 2 字符 0 的 ascii 码...

复赛模拟 1 ,试卷

物理训练 1 试卷。共320分 限时3小时。一 40分 如图所示,一个质量为,半径为 厚度为 的匀质环形导体圆盘可绕通过盘心且垂直盘面的金属轴转动,金属轴的电阻可忽略。圆盘上距盘心处的电阻率与成正比,即,为常量。整个环形圆盘处在与环面垂直的恒定匀强磁场中,磁感应强度的大小为。转轴与圆盘边缘通过电刷与...