新手所需23题.docx

上传人:b****8 文档编号:29535844 上传时间:2023-07-24 格式:DOCX 页数:47 大小:38.33KB
下载 相关 举报
新手所需23题.docx_第1页
第1页 / 共47页
新手所需23题.docx_第2页
第2页 / 共47页
新手所需23题.docx_第3页
第3页 / 共47页
新手所需23题.docx_第4页
第4页 / 共47页
新手所需23题.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

新手所需23题.docx

《新手所需23题.docx》由会员分享,可在线阅读,更多相关《新手所需23题.docx(47页珍藏版)》请在冰豆网上搜索。

新手所需23题.docx

新手所需23题

【练习试题】有限硬币问题(easy)

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

286Accepted:

185 

CaseTimeLimit:

1000MS

Description

输入硬币的n种不同面值(指定各种面值的硬币个数)和m,输出构成1到m元的最少硬币数。

Input

第一行n,m(1<=n<=100,1<=m<=10000) 

第二行n个数表示硬币的面值 

第三行n个数表示每种硬币的数量

Output

m行,每行表示取得该值的最小硬币个数,若不能则输出-1

SampleInput

24

12

11

SampleOutput

1

1

2

-1

Source

ymh

var

i,j,k,n,m:

integer;

a:

array[0..10000]oflongint;

b:

array[1..100,1..2]ofinteger;

begin

readln(n,m);

fori:

=1tondoread(b[i,1]);

fori:

=1tondoread(b[i,2]);

fori:

=1tomdoa[i]:

=maxint;

fori:

=1tondo

forj:

=1tob[i,2]do

fork:

=m-b[i,1]downto0do

ifa[k]+1

a[k+b[i,1]]:

=a[k]+1;

fori:

=1tomdoifa[i]=maxintthenwriteln('-1')

elsewriteln(a[i]);

end.

【练习试题】无限硬币问题(easy)

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

427Accepted:

224 

CaseTimeLimit:

1000MS

Description

输入硬币的n种不同面值(各种面值的硬币个数不限)和m,输出构成1到m元的最少硬币数。

Input

第一行两个数n(n<=200),m(m<=10000) 

第二行n个面值

Output

共m行,每行为组成该值所需最少硬币数(若不能组成则输出-1)

SampleInput

34

123

SampleOutput

1

1

1

2

Source

ymh

var

i,j,n,m:

integer;

a:

array[0..10000]oflongint;

b:

array[1..200]ofinteger;

begin

readln(n,m);

fori:

=1tondoread(b[i]);

fori:

=1tondo

forj:

=0tom-b[i]do

if(a[j+b[i]]>a[j]+1)or(a[j+b[i]]=0)then

a[j+b[i]]:

=a[j]+1;

fori:

=1tomdoifa[i]=0thenwriteln('-1')

elsewriteln(a[i]);

end.

【NOIP1995提高】编码问题

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

149Accepted:

102 

CaseTimeLimit:

1000MS

Description

问题描述:

 

编码问题:

设有一个数组A:

intA[N-1];数组中存放的元素为0到N-1之间的整数,且A[i]≠A[j](当i≠j时)。

 

例如:

N=6时,A=(4,3,0,5,1,2) 

此时,数组A的编码定义如下:

 

A[0]的编码为0 

A[i]的编码为:

在a[0],A[1],…A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1) 

所以上面数组A的编码为:

B=(0,0,0,3,1,2) 

程序要求解决以下问题:

 

①给出数组A后,求出其编码; 

②给出数组A的编码后,求出A中的原数据。

 

Input

若输入1,表示求出其编码,紧接着是n,表示有n个数字,接着是用空格分开的n个数字; 

若输入2,表示求出其原数据,紧接着是n,表示有n个数字,接着是用空格分开的n个数字;

Output

输出对应的结果,每种情况占一行.

SampleInput

16430512

SampleOutput

000312

Source

xinyue——Noip1995第一题

var

i,j,s,k,n:

integer;

a,b:

array[1..100]ofinteger;

c:

array[0..100]ofboolean;

begin

read(s);

read(n);

fori:

=1tondoread(a[i]);

ifs=1thenbegin

fori:

=2tondo

forj:

=1toi-1do

ifa[i]>a[j]theninc(b[i]);

end

elsebegin

fillchar(c,sizeof(c),false);

fori:

=ndownto1dobegin

k:

=0;

forj:

=0ton-1do

ifnotc[j]thenbegin

ifk=a[i]thenbreak;

inc(k);

end;

b[i]:

=j;c[j]:

=true;

end;

end;

fori:

=1ton-1dowrite(b[i],'');

writeln(b[n]);

end.

【基础试题】一笔画问题(normal)

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

379Accepted:

170

Description

编程对给定的一个图,判断能否一笔画出,若能请输出一笔画的先后顺序,否则输出"NoSolution!

Input

共n+1行,第1行为图的度n,接下来的n行(每行n个数据)为图的邻接矩阵,G[i,j]=1表示顶点j有边相连,G[i,j]=0表示顶点i和顶点j无边相连.

Output

若能一笔画出,输出一笔画出的顶点先后顺序,如果有多个满足要求,输出其字典顺序最小的那一个,否则输出"NoSolution!

SampleInput

6

010011

101101

010100

011011

100101

110110

SampleOutput

1->2->3->4->2->6->1->5->4->6->5

Hint

n<15

Source

xinyue

var

i,j,k,n,m,x,bian:

longint;

a:

array[1..100,1..100]oflongint;

b:

array[1..100]ofinteger;

procedureq(m,l:

longint);

varj:

longint;

begin

ifm>biandiv2thenbegin

forj:

=1tom-1dowrite(b[j],'->');

writeln(l);halt;

end;

b[m]:

=l;

forj:

=1tondo

if(a[l,j]=1)thenbegin

a[l,j]:

=0;

a[j,l]:

=0;

q(m+1,j);

a[l,j]:

=1;

a[j,l]:

=1;

end;

end;

begin

readln(n);m:

=0;x:

=0;bian:

=0;

fori:

=1tondobegin

k:

=0;

forj:

=1tondobegin

read(a[i,j]);

ifa[i,j]=1theninc(k);

end;

ifodd(k)thenbegin

inc(m);

ifx=0thenx:

=i;

end;

bian:

=bian+k;

end;

ifm<=2thenbegin

ifm=0thenx:

=1;q(1,x);

end

elsewriteln('NoSolution!

');

end.

【培训试题】石子归并

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

549Accepted:

266 

CaseTimeLimit:

1000MS

Description

  你有一堆石头质量分别为W1,W2,W3...WN.(W<=100000)现在需要你将石头合并为两堆,使两堆质量的差为最小。

Input

  第一行为整数N(1<=N<=20),表示有N堆石子。

接下去N行,为每堆石子的质量。

Output

  输出合并后两堆的质量差的最小值

SampleInput

  5

  5

  8

  13

  27

  14

SampleOutput

  3

Source

xinyue

var

i,n:

longint;min:

longint;

a:

array[1..30]oflongint;

procedurep(m,k:

longint);

begin

ifm>nthenbeginifmin>kthenmin:

=k;exit;end;

p(m+1,k+a[m]);p(m+1,abs(k-a[m]));

end;

begin

readln(n);

fori:

=1tondoreadln(a[i]);

min:

=maxlongint;

p(2,a[1]);

writeln(min);

end.

【基础试题】数列(初级)

TimeLimit:

1000MS MemoryLimit:

65536K

TotalSubmit:

896Accepted:

384

Description

  给定一串整数数列,求出所有的递增和递减子序列的数目,如数列7,2,6,9,8,3,5,2,1可分为(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)5个子序列,答案就是5,我们称2,9,3,5为转折元素。

Input

  输入第一行为n;第二行为n个数;

Output

  输出所有的递增和递减子序列的数目

SampleInput

  9

  7 2 6 9 8 3 5 2 1

SampleOutput

  5

Source

xinyue

var

i,j,k,n:

integer;p:

boolean;

a:

array[1..1000]ofinteger;

begin

readln(n);

fori:

=1tondoread(a[i]);

i:

=1;j:

=0;

whilei

p:

=false;

while(a[i]>=a[i+1])and(i

begininc(i);p:

=true;end;

ifptheninc(j);

p:

=false;

while(a[i]<=a[i+1])and(i

begininc(i);p:

=true;end;

ifptheninc(j);

end;

writeln(j);

end.

【基础试题】国名排序(easy)

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

556Accepted:

352

Description

问题描述:

 

小李在准备明天的广交会,明天有来自世界各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗?

 

  例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿大,中国 

Input

第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字.

Output

输出n个国家按字典顺序的排列.

SampleInput

3

China

Canada

America

SampleOutput

America

Canada

China

Source

xinyue

var

i,j,n,k:

integer;

p:

boolean;

s:

string;

a:

array[1..100]ofstring;

begin

readln(n);

fori:

=1tondoreadln(a[i]);

fori:

=1ton-1do

forj:

=i+1tondobegin

p:

=false;

fork:

=1tolength(a[i])do

if(a[i,k]>a[j,k])or(k>length(a[j]))thenbegin

p:

=true;break;

end

elseifa[i,k]

break;

ifpthenbegin

s:

=a[i];a[i]:

=a[j];a[j]:

=s;

end;

end;

fori:

=1tondowriteln(a[i]);

end.

【模拟试题】传作业

imeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

282Accepted:

53

Description

  某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里。

由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学。

 

  已知某十三与组长之间有N个他熟悉的同学,并且知道这些同学相互之间间隔的距离。

因为每两个同学间传作业都需要下位,所以现在请你帮忙设计一种传作业的方案,使所有同学下位走动的总距离最小。

 

Input

  输入文件pass.in的第1行,为一个正整数N(N<=98),表示某十三与组长之间的他所熟悉的同学人数。

 

  接下来N+2行,每行有N+2个正整数(integer),其中第I行的第J个数代表第I个同学与第J个同学之间的距离(第1个为某十三本人,第2到第N+1个依次为某十三熟悉的同学,第N+2个是组长)。

 

Output

  输出文件pass.out包括一行,为一个正整数L,代表最短的总移动距离。

SampleInput

  3

  03451

  30678

  46076

  57704

  18640

SampleOutput

  1

Source

xinyue

var

i,j,n,k:

longint;

a:

array[1..100,1..100]oflongint;

begin

readln(n);

fori:

=1ton+2do

forj:

=1ton+2doread(a[i,j]);

fori:

=1ton+2do

forj:

=1ton+1do

fork:

=j+1ton+2do

ifa[j,i]+a[i,k]

a[j,k]:

=a[j,i]+a[i,k];

a[k,j]:

=a[j,k];

end;

writeln(a[1,n+2]);

end.

【培训试题】集合操作

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

148Accepted:

68 

CaseTimeLimit:

1000MS

Description

  常用的集合运算有并、交、差、补,现在给定两个集合A和B,它们都是自然数集的子集,且集合中每个元素的范围是:

[-maxint,maxint],全集I定义为integer范围内的所有整数。

 

  你的任务是:

求出集合A和B的并、交、差。

 

Input

  两行:

第一行第一个整数n,表示集合A的元素个数,接下来的n个整数表示集合A的元素; 

     第二行第一个整数m,表示集合B的元素个数,接下来的m个整数表示集合B的元素;

Output

  三行:

第一行若干整数,表示A和B的交集; 

     第二行若干整数,表示A和B的并集; 

     第三行若干整数,表示A和B的差集; 

  

     注意:

为了便于测试,集合元素输出由小到到大排列,如果是空集,则输出‘nil’。

SampleInput

3246

510492

SampleOutput

 24

 012469

 6

Hint

0≤n,m≤10,000

Source

xinyue

var

i,j,n:

integer;

a,b:

array[-maxint..maxint]ofboolean;

begin

read(n);

fori:

=1tondobegin

read(j);a[j]:

=true;

end;

read(n);

fori:

=1tondobegin

read(j);b[j]:

=true;

end;

j:

=0;

fori:

=-maxinttomaxintdo

ifa[i]andb[i]thenbegin

inc(j);write(i,'');

end;

ifj=0thenwrite('nil');writeln;j:

=0;

fori:

=-maxinttomaxintdo

ifa[i]orb[i]thenbegin

inc(j);write(i,'');

end;

ifj=0thenwrite('nil');writeln;j:

=0;

fori:

=-maxinttomaxintdo

ifa[i]andnotb[i]thenbegin

inc(j);write(i,'');

end;

ifj=0thenwrite('nil');writeln;

end.

【模拟试题】光光的作业

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

443Accepted:

33 

CaseTimeLimit:

1000MS

Description

  光光上了高中,科目增多了。

在长假里,光光的老师们都非常严厉,都给他布置了一定量的作业。

 

  假期里,光光一共有的时间是k小时。

在长假前,老师们一共给光光布置了n份作业,第i份作业需要的时间是ti小时。

但是由于老师们互相不商量,因此光光有可能不能完成老师的作业。

当可能不能完成老师的作业时,光光就事后去向老师说明,然后被老师批评一顿了事。

 

  对于一件作业,只有2种情况:

完成或者不完成(快要完成也算不完成)。

如果没完成,受到批评是天经地义的。

但是,不同的作业对于光光来说,批评的力度是不同的。

第i件作业如果没完成,就要受到pi个单位的批评。

多次这样之后,光光想要在长假前就知道他至少会受到多少个单位的批评。

你能帮助他吗?

Input

 第一行只有一个数字k。

 

 第二行只有一个数字n。

 

 接下来n行,每行两个数字,分别是ti和pi,两个数字之间用一个空格分开。

Output

 仅包含一行,是一个数字,代表了光光最少受到的批评。

SampleInput

 5

 3

 26

 13

 47

SampleOutput

 6

Hint

[数据规模约定] 

  100%的数据中,k<=100000,ti<=10000,pi<=10000; 

  30%的数据中,n<=20; 

  100%的数据中,n<=500。

Source

xinyue

var

i,j,k,n,ma,max:

longint;

a:

array[0..100000]oflongint;

t:

array[1..500]oflongint;

p:

array[1..500]oflongint;

begin

readln(k);readln(n);

fori:

=1tondoreadln(t[i],p[i]);

fori:

=1tokdoa[i]:

=5000001;a[0]:

=0;

ma:

=0;

fori:

=1tondoma:

=ma+p[i];

fori:

=1tondo

forj:

=k-t[i]downto0do

if((a[j+t[i]]

(a[j+t[i]]>5000000))and(a[j]<5000000)then

a[j+t[i]]:

=a[j]+p[i];

max:

=0;

fori:

=1tokdoif(max

=a[i];

writeln(ma-max);

end.

【基础试题】最短路径问题(normal)

TimeLimit:

10000MS MemoryLimit:

65536K

TotalSubmit:

708Accepted:

273

Description

平面上有n个点(n<=100),每个点的坐标均在-10000到10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离.现在的任务是找出从一点到另一点之间的最短路径.

Input

共n+m+3行 

第一行为整数n. 

第2行到第n+1行,每行两个整数x和y,描述了一个点的坐标(以一个空格分开) 

第n+2行为一个整数m,表示图中连线的个数. 

以后的m行,每行描述一条连线,由两个整数i和j组成,表示第i个点和第j个点之间有连线. 

最后一行;两个整数s和t,分别表示源点和目标点.

Output

仅一行,一个实数(保留两位小数),表示从s到t的最短路径长度

SampleInput

5

00

20

22

02

31

5

12

13

14

25

35

15

SampleOutput

3.41

Source

xinyue

var

i,j,k,n,m,x,y,h,t:

longint;

min:

real;

a:

array[1..100,0..100]ofreal;

b:

array[1..100,1.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1