tyvj 中秋欢乐赛
tyvj p1006 1978 1979 1980
四道题 做的时候还一小时结束 比较坑 第一题原题 后三题admin 不知道从哪copy来的 都是比较水的 - - 到现在只做了三个题 第二题还没做
唔 先写题解 ps:排名12倍数的 30积分 我果断48名RP++
题目比较简单- - 题解神马的就不要了... 只写了代码
背景 Background
NOIP2008年普及组第一题
描述 Description
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入格式 Input Format
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式 Output Format
输出共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
样例输入 Sample Input [复制数据]
【样例1】
0-670-82162-4
【样例2】
0-670-82162-0
样例输出 Sample Output [复制数据]
【样例1】
Right
【样例2】
0-670-82162-4
时间限制 Time Limitation
各个测试点1s
注释 Hint
各个测试点1s
Delphi语言: 高亮代码由发芽网提供
program tyvj1006;
var s:string;
p:array[1..20 ] of integer;
k,i,len,t,sum,j:integer;
begin
k:=1;read(s);
len:=13;
for i:=1 to 13 do
if (ord(s[i])<=ord('9')) and (ord(s[i])>=ord('0')) then begin
p[k]:=ord(s[i])-ord('0');
inc(k);end;
sum:=0;
if s[13]='X' then j:=k-1 else j:=k-2;
for i:=1 to j do
sum:=sum+p[i]*i;
t:=sum mod 11;
if (t=p[k-1])or ((t=10) and (s[13]='X')) then write('Right') else begin
for i:=1 to len-1 do write(s[i]);
if t=10 then write('X') else
write(t);
end;
end.
描述 Description
题目背景
《思远高考绿色通道》(Green Passage, GP)是唐山一中常用的练习册之一,其题量之大深受lsz等许多oiers的痛恨,其中又以数学绿色通道为最。2007年某月某日,soon-if (数学课代表),又一次宣布收这本作业,而lsz还一点也没有写……
题目描述
高二数学《绿色通道》总共有n道题目要写(其实是抄),编号1..n,抄每道题所花时间不一样,抄第i题要花a[i]分钟。由于lsz还要准备NOIP,显然不能成天写绿色通道。lsz决定只用不超过t分钟时间抄这个,因此必然有空着的题。每道题要么不写,要么抄完,不能写一半。一段连续的空题称为一个空题段,它的长度就是所包含的题目数。这样应付自然会引起马老师的愤怒。马老师发怒的程度(简称发怒度)等于最长的空题段长度。
现在,lsz想知道他在这t分钟内写哪些题,才能够尽量降低马老师的发怒度。由于lsz很聪明,你只要告诉他发怒度的数值就可以了,不需输出方案。(快乐融化:那么lsz怎么不自己写程序?lsz:我还在抄别的科目的作业……)
输入格式 Input Format
第一行为两个整数n,t,代表共有n道题目,t分钟时间。
以下一行,为n个整数,依次为a[1], a[2],... a[n],意义如上所述。
输出格式 Output Format
输出仅一行,一个整数w,为最低的发怒度。
样例输入 Sample Input [复制数据]
17 11
6 4 5 2 5 3 4 5 2 3 4 5 2 3 6 3 5
样例输出 Sample Output [复制数据]3
描述 Description
小明有n个长度不一的小木棍,这些木棍的长度都是正整数。小明的父亲想和小明做一个游戏。他规定一个整数长度l,让小明闭着眼睛从n个木棍中随便拿出两个。如果两个木棍的长度总和小于等于l,则小明胜,否则小明的父亲胜。小明想知道他胜出的概率究竟有多大。
输入格式 Input Format
输入包含两行。第一行为两个整数n和l。第二行包含n个整数,分别为n个木棍的长度。
输出格式 Output Format
输出包含一个实数,小明胜出的概率,保留两位小数。
样例输入 Sample Input [复制数据]4 5
1 2 3 4样例输出 Sample Output [复制数据]0.67
时间限制 Time Limitation
各个测试点1s
注释 Hint
n和l都不超过100000
Delphi语言: 高亮代码由发芽网提供
program zqp2;
var a:array[1..100000] of longint;
n,m:int64;mid,l,r,i,j:longint;tot:extended;
procedure qsort(head,tail:longint);
var i,j,x:longint;
begin
i:=head;j:=tail;x:=a[i];
while i<j do begin
while (i<j) and (a[j]>=x) do dec(j);
a[i]:=a[j];
while (i<j) and (a[i]<=x) do inc(i);
a[j]:=a[i];
end;
a[i]:=x;
if head<i-1 then qsort(head,i-1);
if tail>i+1 then qsort(i+1,tail);
end;
begin
readln(n,m);
tot:=0;
for i:=1 to n do read(a[i]);
qsort(1,n);
for i:=1 to n-1 do begin
l:=i+1;r:=n;
while (l<=r) do begin
mid:=(l+r) div 2;
if a[mid]+a[i]=m then break;
if a[mid]+a[i]>m then r:=mid-1;
if a[mid]+a[i]<m then l:=mid+1;
end;
mid:=(l+r) div 2;
tot:=tot+mid-i;
end;
tot:=tot*2/((n-1)*n);
writeln(tot:0:2);
end.
背景 Background
大家都知道胖子是一名机械工程师,他很胖,然而最近遇到了一件烦心事,这件事是如此的烦心,以至于他的体重锐减20%!
烦心事来自一位设计师瘦子给胖子的机器3D设计图纸,瘦子是如此的没有力气,以至于将图纸画得模糊不清,而且这个方形机器中居然没有除工件外的空位,胖子800度的视力受到严重考验,于是他终日食之不得下咽。
胖子终于无法忍受,决定求助于最新科技——电脑,他买来一台联想电脑(带闪联),借助它进行图纸辨别,但是电脑上没有这样的软件,于是胖子以1斤肉作为奖励,希望你帮他设计一个软件。
描述 Description
胖子说:“我的图纸是三维的(先进吧),用坐标系分了网格,每个工件包含相邻的一些网格部分,由于万恶的瘦子很愚蠢,我不得不认为模糊程度相差在一定范围的相邻两格是同一工件,你就帮我看看总共有多少个工件吧”。
输入格式 Input Format
第一行3个整数l,w,h (l,w,h<=50) 表示三维图纸的长宽高;
第二行1个整数m(0<=m<=255)表示模糊程度的最大允许差值;
后面有一行l*w*h个0~255的非负整数,按照空间坐标从小到大给出瘦子画每一格的模糊程度(坐标大小比较,按长,宽,高的优先顺序)。
输出格式 Output Format
一个整数,工件个数。
Delphi语言: 高亮代码由发芽网提供
program zhongqiup4;
var a:array[0..51,0..51,0..51 ] of integer;
dx:array[1..6] of integer=(0,0,0,0,1,-1);
dy:array[1..6] of integer=(0,0,-1,1,0,0);
dz:array[1..6] of integer=(1,-1,0,0,0,0);
mark:array[0..51,0..51,0..51] of boolean;
l,h,w,i,j,k,max,sum:integer;
procedure dfs(l,h,w:integer);
var i:integer;
begin
mark[l,h,w]:=true;
for i:=1 to 6 do begin
if (not(mark[l+dx[i],h+dy[i],w+dz[i]])) and(abs(a[l,h,w]-a[l+dx[i],h+dy[i],w+dz[i]])<=max)
then begin
mark[l+dx[i],h+dy[i],w+dz[i]]:=true;
dfs(l+dx[i],h+dy[i],w+dz[i]);
end;
end;
end;
begin
readln(l,w,h);
readln(max);
fillchar(mark,sizeof(mark),true);
for i:=1 to l do
for j:=1 to w do
for k:=1 to h do begin
read(a[i,j,k]);
mark[i,j,k]:=false;
end;
sum:=0;
for i:=1 to l do
for j:=1 to w do
for k:=1 to h do
if not mark[i,j,k] then begin
inc(sum);
dfs(i,j,k);
end;
writeln(sum);
end.