【模拟】图书馆书目检索
题目:图书馆书目检索 rqnoj159
题目描述
图书馆馆长正犯愁呢,原来,有一堆的书要他整理,每本书都有一个书号(<=200000),现在他有一本书,这本书的书号为K(<=200000),现在他要找出一本书号比这本书大的书和书号比这本小的书(但都要最接近图书馆馆长已有的书号),将找到的这两本书的书号加起来,并算出加起来以后的数是否为素数
输入格式
第一行二个数为N,K,表示几本书以及已有书的书号(<=200000)
第二行开始有N个整数,表示这些书的书号
输出格式
第一行一个数,表示两本书书号加起来的和
第二行一个字符,表示和是否为素数,若是则输出"Y"否则输出"F"(引号不打出)
样例输入
样例输出
题目不用解释了吧,pascal Code
program rqnoj159;
var
n,k:longint;
a:array[0..200000+10] of longint;
procedure init;
begin
assign(input,'rqnoj159.in');
assign(output,'rqnoj159.out');
reset(input);
rewrite(output);
end;
procedure outit;
begin
close(input);
close(output);
halt;
end;
procedure readdata;
begin
end;
procedure swap(var a,b:longint);
var t:longint;
begin
t:=a;a:=b;b:=t;
end;
procedure qsort(l,r:longint);
var
i,j:longint;
x:longint;
begin
i:=l;j:=r;x:=a[(i+j)div 2];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
function ok(x:longint):boolean;
var
i:longint;
begin
for i:=2 to x-1 do
begin
if x mod i =0 then exit(false);
end;
exit(true);
end;
procedure main;
var
i,sum:longint;
begin
read(n,k);
for i:=1 to n do read(a[i]);
qsort(1,n);
sum:=0;
for i:=1 to n do
if a[i]>=k then
begin
inc(sum,a[i-1]);
break;
end;
for i:=n downto 1 do
if a[i]<=k then
begin
inc(sum,a[i+1]);
break;
end;
writeln(sum);
if ok(sum) then writeln('Y') else writeln('F');
end;
begin
init;
readdata;
main;
outit;
end.

..... 转载请注明出处 ..... http://oijzh.cnblogs.com ..... by jiangzh
浙公网安备 33010602011771号