HDU 1034 [Candy Sharing Game]模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1034

题目大意:一圈小孩有初始糖果偶数颗。每次老师吹一次哨,孩子就要把自己糖的一半给右边的小孩。如果结余的糖果是奇数,老师就再给一颗。最后所有小孩糖果是相等的且为定值(因为最大值不会增,最小值不会减,相等的邻居中居右的不变,若最大最小不等,小的势必增加:老师给的)。问需要吹几次口哨,最后小孩都有几颗糖。

关键思想:模拟水题,舍得关系把握好。数据比较弱,水过

代码如下:

//模拟 水题 
#include <iostream>
using namespace std;
int eg[10000];
int main(){
	int N;
	int temp0,temp1,cnt; 
	bool flag=false;
	while(cin>>N&&N!=0){
		flag=false;
		cnt=0,temp0=0;
		for(int i=0;i<N;i++)cin>>eg[i];
		
		while(!flag){
			temp0=(eg[N-1]/2);	//最后一个给第一个的 
			for(int i=0;i<N;i++){
				temp1=eg[i]/2;	//temp1是当前要给出去的 
				if(((eg[i]/=2)+=temp0)%2==1)eg[i]++;		//结算后是奇数就拿一个 
				temp0=temp1;	//temp0是当前能拿到的 
			}
			cnt++;
			//判断是否全相等 
			bool flag0=false;
			for(int i=1;i<N;i++)
			if(eg[i]!=eg[i-1])flag0=true;
			if(flag0==false)flag=true;
		}
		cout<<cnt<<" "<<eg[0]<<endl; 
	}
	return 0;
} 

  

posted @ 2017-02-04 14:16  哇咔咔咔  阅读(234)  评论(0编辑  收藏  举报