Noip2014普及组

原创 2015年07月10日 12:54:41

Noip2014普及组  



一.珠心算测试

【问题描述】

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正

整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

最近老师出了一些测验题,请你帮忙求出答案。

【输入】

输入文件名为count.in。

输入共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。

第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

【输出】

输出文件名为count.out。

输出共一行,包含一个整数,表示测验题答案。

【输入输出样例】

count.in

count.out

4

1 2 3 4

2

【样例说明】

由1+2=3,1+3=4,故满足测试要求的答案为2。注意,加数和被加数必须是集合中的两个不同的数。

【数据说明】

对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。

【代码】

program count;
var i,j,k,n,s:integer;
a,b:array[0..105]of integer;
begin
  readln(n);
  for i:=1 to n do
    read(a[i]);
  for i:=1 to n do
    b[i]:=0;
  for i:=1 to n do
    for j:=1 to n do
      for k:=1 to n do
        if (a[i]=a[j]+a[k])and(i<>j)and(j<>k)and(k<>i) then b[i]:=1;
  s:=0;
  for i:=1 to n do
    if b[i]=1 then s:=s+1;
  writeln(s);
end.
 

二.比例化简

【问题描述】

在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。

不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,

A’/ B’ ≥ A/B且A’/B’- A/B的值尽可能小。

【输入】

输入文件名为ratio.in。

输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限

【输出】

输出文件名为ratio.out

输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。

【输入输出样例】

ratio.in

ratio.out

1498 902 10

5 3

【数据说明】

对于100%的数据,1 ≤ A ≤ 1,000,000,1 ≤ B ≤ 1,000,000,1 ≤ L ≤ 100,

A/B ≤ L。

 【代码】


program ratio;
var a,b,a1,b1,d,i,j,l:longint;
c1,c2,c3,min:real;
function gys(m,n:longint):longint;
var a,b,r:longint;
begin
  a:=m;
  b:=n;
  repeat
    r:=a mod b;a:=b;
    b:=r;
  until r=0;
  gys:=a;
end;
begin
  readln(a,b,l);
  c1:=a/b;
  min:=1000;
  for i:=1 to l do
  begin
    for j:=1 to l do
      begin
        c2:=i/j;
        c3:=c2-c1;
        d:=gys(i,j);
        if (c3<min) and (d=1) and(c3>=0) then begin min:=c3;a1:=i;b1:=j;end;
      end;
  end;
  write(a1,' ');
  writeln(b1);
end.
 

 螺旋矩阵

【问题描述】

一个n行n列的螺旋矩阵可由如下方法生成:

从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,

则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。

下图是一个n = 4 时的螺旋矩阵。

现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。

【输入】

输入文件名为matrix.in。

输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。

【输出】

输出文件名为matrix.out。

输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。

【输入输出样例】

matrix.in

matrix.out

4 2 3

14

【数据说明】

对于50%的数据,1 ≤ n ≤ 100;

对于100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。

【代码】

program matrix;
var
  n,i,j,tn,s,m,k:longint;


procedure print(x,y:longint);
  begin
    if x=1 then begin writeln(s+y-1); exit end;
    s:=s+tn-1;
    if y=tn then begin writeln(s+x-1); exit end;
    s:=s+tn-1;
    if x=tn then begin writeln(s+tn-y); exit end;
    s:=s+tn-1;
    writeln(s+tn-x)
  end;


function min(x,y:longint):longint;
  begin
    if x<=y then exit(x) else exit(y)
  end;


begin
  readln(n,i,j);
  m:=min(i,min(j,min(n-i+1,n-j+1)));
  i:=i-m+1;
  j:=j-m+1;
  tn:=n;
  s:=1;
  for k:=1 to m-1 do
    begin
      inc(s,4*tn-4);
      dec(tn,2)
    end;
  print(i,j);
end.
 

子矩阵(submatrix. pas)

【问题描述】

给出如下定义:

1. 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。

例如,下面左图中选取第2、4行和第2、4、5列交叉位置的元素得到一个2*3的子矩阵如右图所示。

2. 相邻的元素:矩阵中的某个元素与其上下左右四个元素(如果存在的话)是相邻的。

3. 矩阵的分值:矩阵中每一对相邻元素之差的绝对值之和。

本题任务:给定一个n行m列的正整数矩阵,请你从这个矩阵中选出一个r行c列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值。

【输入】

输入文件名为submatrix.in。

第一行包含用空格隔开的四个整数n,m,r,c,意义如问题描述中所述,每两个整数之间用一个空格隔开。

接下来的n行,每行包含m个用空格隔开的整数,用来表示问题描述中那个n行m列的矩阵。

【输出】

输出文件名为submatrix.out。

输出共1行,包含1个整数,表示满足题目描述的子矩阵的最小分值。

【输入输出样例1】

submatrix.in

submatrix.out

5 5 2 3

9 3 3 3 9

9 4 8 7 4

1 7 4 6 6

6 8 5 6 9

7 4 5 6 1

6

 

【输入输出样例1说明】

该矩阵中分值最小的2行3列的子矩阵由原矩阵的第4行、第5行与第1列、第3列、第4列交叉位置的元素组成,为 其分值为

【输入输出样例2】

submatrix.in

submatrix.out

7 7 3 3

7 7 7 6 2 10 5

5 8 8 2 1 6 2

2 9 5 5 6 1 7

7 9 3 6 1 7 8

1 9 1 4 7 8 8

10 5 9 1 1 8 10

1 3 1 5 4 8 6

16

 

【输入输出样例2说明】

该矩阵中分值最小的3行3列的子矩阵由原矩阵的第4行、第5行、第6行与第2列、第6列、第7列交叉位置的元素组成,选取的分值最小的子矩阵为

【数据说明】

对于50%的数据,1≤n≤12,1≤m≤12,矩阵中的每个元素1≤a[i,j]≤20;

对于100%的数据,1≤n≤16,1≤m≤16,矩阵中的每个元素1≤a[i,j]≤1000, 1≤r≤n,1≤c≤m。

【代码】


一.珠心算测试

【问题描述】

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正

整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

最近老师出了一些测验题,请你帮忙求出答案。

【输入】

输入文件名为count.in。

输入共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。

第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

【输出】

输出文件名为count.out。

输出共一行,包含一个整数,表示测验题答案。

【输入输出样例】

count.in

count.out

4

1 2 3 4

2

【样例说明】

由1+2=3,1+3=4,故满足测试要求的答案为2。注意,加数和被加数必须是集合中的两个不同的数。

【数据说明】

对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。

【代码】

program count;
var i,j,k,n,s:integer;
a,b:array[0..105]of integer;
begin
  readln(n);
  for i:=1 to n do
    read(a[i]);
  for i:=1 to n do
    b[i]:=0;
  for i:=1 to n do
    for j:=1 to n do
      for k:=1 to n do
        if (a[i]=a[j]+a[k])and(i<>j)and(j<>k)and(k<>i) then b[i]:=1;
  s:=0;
  for i:=1 to n do
    if b[i]=1 then s:=s+1;
  writeln(s);
end.
 

二.比例化简

【问题描述】

在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。

不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,

A’/ B’ ≥ A/B且A’/B’- A/B的值尽可能小。

【输入】

输入文件名为ratio.in。

输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限

【输出】

输出文件名为ratio.out

输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。

【输入输出样例】

ratio.in

ratio.out

1498 902 10

5 3

【数据说明】

对于100%的数据,1 ≤ A ≤ 1,000,000,1 ≤ B ≤ 1,000,000,1 ≤ L ≤ 100,

A/B ≤ L。

 【代码】


program ratio;
var a,b,a1,b1,d,i,j,l:longint;
c1,c2,c3,min:real;
function gys(m,n:longint):longint;
var a,b,r:longint;
begin
  a:=m;
  b:=n;
  repeat
    r:=a mod b;a:=b;
    b:=r;
  until r=0;
  gys:=a;
end;
begin
  readln(a,b,l);
  c1:=a/b;
  min:=1000;
  for i:=1 to l do
  begin
    for j:=1 to l do
      begin
        c2:=i/j;
        c3:=c2-c1;
        d:=gys(i,j);
        if (c3<min) and (d=1) and(c3>=0) then begin min:=c3;a1:=i;b1:=j;end;
      end;
  end;
  write(a1,' ');
  writeln(b1);
end.
 

 螺旋矩阵

【问题描述】

一个n行n列的螺旋矩阵可由如下方法生成:

从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,

则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。

下图是一个n = 4 时的螺旋矩阵。

现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。

【输入】

输入文件名为matrix.in。

输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。

【输出】

输出文件名为matrix.out。

输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。

【输入输出样例】

matrix.in

matrix.out

4 2 3

14

【数据说明】

对于50%的数据,1 ≤ n ≤ 100;

对于100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。

【代码】

program matrix;
var
  n,i,j,tn,s,m,k:longint;


procedure print(x,y:longint);
  begin
    if x=1 then begin writeln(s+y-1); exit end;
    s:=s+tn-1;
    if y=tn then begin writeln(s+x-1); exit end;
    s:=s+tn-1;
    if x=tn then begin writeln(s+tn-y); exit end;
    s:=s+tn-1;
    writeln(s+tn-x)
  end;


function min(x,y:longint):longint;
  begin
    if x<=y then exit(x) else exit(y)
  end;


begin
  readln(n,i,j);
  m:=min(i,min(j,min(n-i+1,n-j+1)));
  i:=i-m+1;
  j:=j-m+1;
  tn:=n;
  s:=1;
  for k:=1 to m-1 do
    begin
      inc(s,4*tn-4);
      dec(tn,2)
    end;
  print(i,j);
end.
 

子矩阵(submatrix. pas)

【问题描述】

给出如下定义:

1. 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。

例如,下面左图中选取第2、4行和第2、4、5列交叉位置的元素得到一个2*3的子矩阵如右图所示。

2. 相邻的元素:矩阵中的某个元素与其上下左右四个元素(如果存在的话)是相邻的。

3. 矩阵的分值:矩阵中每一对相邻元素之差的绝对值之和。

本题任务:给定一个n行m列的正整数矩阵,请你从这个矩阵中选出一个r行c列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值。

【输入】

输入文件名为submatrix.in。

第一行包含用空格隔开的四个整数n,m,r,c,意义如问题描述中所述,每两个整数之间用一个空格隔开。

接下来的n行,每行包含m个用空格隔开的整数,用来表示问题描述中那个n行m列的矩阵。

【输出】

输出文件名为submatrix.out。

输出共1行,包含1个整数,表示满足题目描述的子矩阵的最小分值。

【输入输出样例1】

submatrix.in

submatrix.out

5 5 2 3

9 3 3 3 9

9 4 8 7 4

1 7 4 6 6

6 8 5 6 9

7 4 5 6 1

6

 

【输入输出样例1说明】

该矩阵中分值最小的2行3列的子矩阵由原矩阵的第4行、第5行与第1列、第3列、第4列交叉位置的元素组成,为 其分值为

【输入输出样例2】

submatrix.in

submatrix.out

7 7 3 3

7 7 7 6 2 10 5

5 8 8 2 1 6 2

2 9 5 5 6 1 7

7 9 3 6 1 7 8

1 9 1 4 7 8 8

10 5 9 1 1 8 10

1 3 1 5 4 8 6

16

 

【输入输出样例2说明】

该矩阵中分值最小的3行3列的子矩阵由原矩阵的第4行、第5行、第6行与第2列、第6列、第7列交叉位置的元素组成,选取的分值最小的子矩阵为

【数据说明】

对于50%的数据,1≤n≤12,1≤m≤12,矩阵中的每个元素1≤a[i,j]≤20;

对于100%的数据,1≤n≤16,1≤m≤16,矩阵中的每个元素1≤a[i,j]≤1000, 1≤r≤n,1≤c≤m。

【代码】

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【NOIP】普及组 2014 问题求解

1.把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(用K表示)。例如,M=7,N=3时,K=8;在这里认为和是同一种放置方法。问:M=8,N=5时,K=_。2....
  • vmret
  • vmret
  • 2016-09-03 11:51
  • 157

有故障的打字机 题解

有故障的打字机 程序名:typewrt.pas/c/cpp 输入文件:typewrt.in 输出文件:typewrt.out 时限:1秒 问题描述     一台...

NOIP 2014 普及组 T1 珠心算测验

【题意】 已知:n个数 求:求恰好等于集合中另外两个不同的数之和的数的个数 【构思】 由于数满足单调性,从小加到大,先排一下序 然后用v存储每个数等于其他数的和的次数 最后用累加器,如果...

【2014.8.17NOIP普及组模拟】接苹果

题目描述     很少有人知道奶牛爱吃苹果。农夫约翰的农场上有两棵苹果树(编号为1和2),每一棵树上都长满了苹果。奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果从树上落下。但是,由于苹果掉到...

NOIP 2014 普及组 T3 螺旋矩阵

【题意】 已知:n,r,c(n 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动;如果前方是未曾经过的格子, 则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。...

有错误的打印机

题目: 一台打字机准备将1到10^n的数依次打出。在打印过程中,这台打字机出现了一个故障:数字“3”打不出来。因此,所有含有数字“3”的数都没有被正确地打出。试问没有被正确打出的数一共有多少个。 输入...

Noip2014普及组

T2: 题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为 ...

NOIP2014普及组解题报告 -----by IAMACER

NOIP2014普及组解题报告

NOIP校内模拟赛1

第一场打得我很不高兴,本来很水,但是本沙茶TM写挂了,搞了好几个月数竞的人滚回来,居然…我艹T1 有故障的打字机问题描述一台打字机准备将1到10^n的数依次打出。在打印过程中,这台打字机出现了一个故障...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)