• HDU-1034 Candy Sharing Game (模拟)


    这样简单的题做了半个小时,我学会了一个道理,要认真读题.....(漏读了一个同时交换..)

    题意:有n个小朋友围成一圈坐,每个人手上分别有 a ,b ,c...个糖果。老师每吹一次哨音,小朋友将手上的糖果拿出一半,交给其右边的人(顺时针),如果交换后有小朋友的手上糖果数为奇数,则老师将再给他一颗糖果。求第几次交换后每个人手上糖果数相等,且为多少.

    思路:就是按照实际的顺序,写出模拟交换的步骤

    #include <iostream>
    //同时分一半出去  
    using namespace std;
    const int maxn = 1e5+9;
    int arr[maxn];
    int half[maxn];
    int n;
    int main(){
    
        while(scanf("%d",&n)&&n){
            for(int i=0;i<n;i++){
                cin>>arr[i];
            }
            int cnt = 0;
            while(1){
                int k;
                for(k = 1;k<n;k++){
                    if(arr[k]!= arr[k-1]) break;
                }
                if(k==n) break;
                //拿出一半的糖果 
                for(int i=0;i<n;i++){
                    half[i] = arr[i] /= 2;
                }
                //交给右边的人
                arr[0] += half[n-1];
                for(int i=0;i<n;i++){
                    if(i==n-1) break;
                    arr[i+1] += half[i];                
                }
                //如果有奇数糖果则加1 
                for(int i=0;i<n;i++){
                    if(arr[i]&1) arr[i]++;    
                } 
                cnt++;
            }
            cout<<cnt<<" "<<arr[0]<<endl; 
            
        }
    }
  • 相关阅读:
    今发现“最全前端资源汇集”,果断收藏
    js基础
    重排版与重绘
    小乌龟的配置
    考试网站
    苹果手机上时间的兼容
    自定义alert
    [概率dp] 流浪地球
    [权值线段树] 1163B2 Cat Party (Hard Edition)
    [单调栈]1156E Special Segments of Permutation
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11197448.html
Copyright © 2020-2023  润新知