NOIP 2002

T1:均分纸牌

题目描述

有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。

移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

例如 N=4,4 堆纸牌数分别为:

①9②8③17④6

移动3次可达到目的:

从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ②(9 11 10 10)-> 从 ② 取 1 张牌放到①(10 10 10 10)。

输入输出格式

输入格式:

键盘输入文件名。文件格式:

N(N 堆纸牌,1 <= N <= 100)

A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)

输出格式:

输出至屏幕。格式为:

所有堆均达到相等时的最少移动次数。

输入输出样例

输入样例#1:

4
9 8 17 6

输出样例#1:

3

Solution:

  本题只需要模拟一下。

  首先预处理求出平均值,如果为0则不需要移动。然后固定从1或N开始移动牌堆,for一下就好了~

  //可能出现负数

 1 #include<cstdio>
 2 using namespace std;
 3 int n,a[105],sum=0,cnt=0,p=0;
 4 int main(){
 5     scanf("%d",&n);
 6     for(int i=1;i<=n;i++) scanf("%d",&a[i]),sum+=a[i];
 7     p=sum/n;
 8     for(int i=1;i<=n;i++) a[i]-=p;
 9     for(int i=1;i<=n;i++) {
10         if(!a[i]) continue;
11         a[i+1]+=a[i];
12         cnt++;
13     }
14     printf("%d",cnt);
15     return 0;
16 }

T3 自由落体

题目描述

在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1。在地面上有一个小车(长为 L,高为 K,距原点距离为 S1)。已知小球下落距离计算公式为 d=1/2*g*(t^2),其中 g=10,t 为下落时间。地面上的小车以速度 V 前进。

如下图:

小车与所有小球同时开始运动,当小球距小车的距离 <= 0.0001(感谢Silver_N修正) 时,即认为小球被小车接受(小球落到地面后不能被接受)。

请你计算出小车能接受到多少个小球。

输入输出格式

输入格式:

键盘输人:

H,S1,V,L,K,n (l<=H,S1,V,L,K,n <=100000)

输出格式:

屏幕输出:

小车能接受到的小球个数。

输入输出样例

输入样例#1:

5.0 9.0 5.0 2.5 1.8 5

输出样例#1

1

Solution:

  这是一个有精度的题目。

  也是简单模拟,分别求出两个零界点,然后进行判断。

  嗯,代码有点短...

 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 int n,ans=0;
 5 double h,s,v,l,k;
 6 int main(){
 7     scanf("%lf%lf%lf%lf%lf%d",&h,&s,&v,&l,&k,&n);
 8     double ll,rr;
 9     ll=-0.0001+(s-sqrt(h/5)*v);
10     rr= 0.0001+(s-sqrt((h-k)/5)*v)+l;
11     for(int i=0;i<n;i++) if(i<rr&&i>ll) ans++;
12     printf("%d",ans);
13     return 0;
14 }
时间: 2024-10-25 19:51:42

NOIP 2002的相关文章

NOIP 2002提高组 选数 dfs/暴力

1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34. 现在,要求你计算出和为素

NOIP 2002 马拦过河卒 BFS+递推

Description : 如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右. 同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为方马的控制点.例如上图C点上的马可以控制9个点(图中的P1,P2...P8和C).卒不能通过对方的控制点. 棋盘用坐标表示,A点(0,0).B点(n, m)(n,m为不超过20的整数,并由键盘输入),同样马的位置坐标是需要给出的(约定:C≠A,同时C≠B).现在要求你计算出卒从A点能够到达B点的路 径的

1010 过河卒 2002年NOIP全国联赛普及组codevs

1010 过河卒  2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如上图 C 点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20 的整数,并由键盘输入),同样马

1008 选数 2002年NOIP全国联赛普及组

1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34. 现在

CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)

arr[i] :表示每个牌堆的纸牌的数目 平均值 :当纸牌数都一样多时,纸牌的数目 从左向右考虑,每堆纸牌有三种状态: 1) arr[i] == 平均值,考虑arr[i+1] 2) arr[i] < 平均值,此时由arr[i+1]移给arr[i]纸牌. => 移动纸牌数:(平均值 - arr[i])张    注:   考虑此时,arr[i]缺牌,那么i右边的牌堆必然多牌,无论哪堆多牌,必然有由arr[i+1]将牌移给arr[i]的过程. 3) arr[i] > 平均值,此时由arr[i]

codevs 1009 产生数 2002年NOIP全国联赛普及组 x (内附解析w)

题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规则(k=2): 2-> 5 3-> 6 上面的整数 234 经过变换后可能产生出的整数为(包括原数): 234 534 264 564 共 4 种不同的产生数问题: 给出一个整数 n 和 k 个规则.求出: 经过任意次的变换(0次或多次),能产生出多少个不同整数. 仅要求输出个数. 输入描述 In

棋盘型动态规划 之 CODE[VS] 1010 过河卒 2002年NOIP全国联赛普及组

/* dp[i][j] := 从起点[0][0]到坐标为[i][j]的位置,路径的条数. 卒行走规则:可以向下.或者向右,故 dp[i][j] = dp[i-1][j] + dp[i][j-1] (向下)      (向右) 注意: 去掉对方马的控制点 附: codevs测试数据有些弱,可以考虑到这里评测一下:清橙 (主要区别在于,dp[][]数据类型设为long long) */ 1 #include <iostream> 2 #include <cstdlib> 3 #incl

【动态规划】【记忆化搜索】CODEVS 1010 过河卒 2002年NOIP全国联赛普及组

f(i,j)=f(i-1,j)+f(i,j-1),显然可以暴力递归求解,但是很多重复的状态,所以可以记忆下来. 注意障碍点和边界的特判. 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int x1,y1,x2,y2,dp[25][25]; 5 bool a[25][25]; 6 const int dx[]={1,-1,1,-1,2,-2,2,-2},dy[]={2,2,-2,-2,1,1,-1,-1

TYVJ 2002 扑克牌 题解

P2002 扑克牌 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~ 描述 Rainbow把一副扑克牌(54张)随机洗开,倒扣着放成一摞.然后Admin从上往下依次翻开每张牌,每翻开一张黑桃.红桃.梅花或者方块,就把它放到对应花色的堆里去.Rainbow想问问Admin,得到A张黑桃.B张红桃.C张梅花.D张方块需要翻开的牌