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 }
     
  • 相关阅读:
    正则匹配中 ^ $ 和  的区别
    jQuery 选择同时包含两个class的元素的实现方法
    JSON—去除JSON数据中的所有HTML标…
    HTML5 自定义属性 data-*属性名一定要小写吗?
    Java线程池(ExecutorService)使用
    ExecutorService中submit和execute的区别
    启用Microsoft loopback Adapte
    【Spring】如何配置多个applicationContext.xml文件
    C#编程之AES加密(一)
    C#编程之利用C#创建dll并调用(三)
  • 原文地址:https://www.cnblogs.com/drizzly/p/7611820.html
Copyright © 2011-2022 走看看