zoukankan      html  css  js  c++  java
  • 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 }
     
  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/drizzly/p/7611820.html
Copyright © 2011-2022 走看看