zoukankan      html  css  js  c++  java
  • 天梯 1098 均分纸牌

    解题报告:给出n堆纸牌,现在规定:第一堆的牌只能移动到第二堆,然后第n堆的牌只能移动到第n-1堆,然后其他的堆里的牌可以往两边移动,一次可以移动任意张,问最少可以经过多少次移动才可以使得所有堆里面的牌的数量相同(可以确定的是牌的总数是堆的数的整数倍)

    这题可以说是贪心,我的做法是定义一个数,初始化为0,同时定义一个位置指针,然后从第一个位置往后移动,每次都加上这个堆的纸牌数与平均数的差,当这个数等于0的时候就将这个位置与位置指针的差累加起来,同时将位置指针更新到当前位置的下一个位置。这样最后便得到最后结果,时间复杂度只是O(n)。下面是代码:

     1 #include<cstdio>
     2 const int maxn = 100+3;
     3 int n,A[maxn];
     4 
     5 int main() {
     6     int sum = 0 , eve ;
     7     while(scanf( " %d "  , & n ) != EOF) {
     8         sum = 0; 
     9         for( int i = 1;i <= n ; ++i ) {
    10             scanf("%d",&A[i]);
    11             sum += A[i];
    12         }
    13         
    14         eve = sum / n;
    15         int t = 0 , flag = 1 ,  tot = 0 ;
    16         
    17         for( int i = 1;i <= n ;  ++i )  {
    18             t += ( A[i] - eve ) ;
    19             if( t == 0 ) {
    20                 tot += (i - flag);
    21                 flag = i + 1 ;
    22             }
    23         }
    24         printf("%d
    ",tot);
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    DNS服务器详解
    numpy学习
    test_pandas
    1.爬虫基本介绍
    数据分析介绍及软件使用 01
    3.解析库beautifulsoup
    jQuery UI vs EasyUI
    "file:///" file 协议
    Display:Block
    前端响应式设计中@media等的相关运用
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3249076.html
Copyright © 2011-2022 走看看