Hydra


私信TA

用户名:uq_87402456886

访问量:1343

签 名:

等  级
排  名 17963
经  验 758
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:思路很简单,就是模拟题目的过程,不过可能算法上还能优化一下时间。
注意事项:

题目说“每个小朋友都把自己的糖果分一半给左手边的孩子。 ”我一开始以为是分一半给左边后,左边的加上那一半再去分,结果一直只对百分之60,还有两个测试点过不去,结果看了题解,发现是减半后先临时保存起来,等全部孩子都减半后再去分配。这样就避免了除以奇数,导致有精度误差(而且这样分配的后果是,最后一个小朋友的数目永远最少),而且如果按照我的思路去分配,最后会发现有那种全部都是偶数了,但是还是都不相等的情况,(这个是我跟踪发现的)我还以为要做什么方法,在中间去优化,结果发现是自己理解错了题目........。太坑了啊......
参考代码:我是根据每轮判断是否相等,来维持循环,其实可以通过老师发糖的循环里面去判断,这样可以节省时间

#include<iostream>
#include<cmath>
using namespace std;

int n;
int a[101];
bool all()
{
	bool ok = true;
	int i =0;
	for(i = 0;i<n-1;i++)
	{
		if(a[i]!=a[i+1])
		{
			return false;	
		}	
	}	
	return ok;
}


int main()
{
	int sum = 0;
	cin>>n;
	int i =0;
	for(int i =0;i<n;i++)
	{
		cin>>a[i];
	}
	while(all()==false)
	{
		int ok = 0;
		for(i = 0;i<n;i++)
		{
			a[i]/=2;
		}
		int temp = a[n-1];
		for(i = n-1;i>0;i--)
		{
			a[i]+=a[i-1];
		}
		a[0]+=temp;
		for(i = 0;i<n;i++)
		{
			if(a[i]%2!=0)
			{
				a[i]+=1;
				sum++;
			}
			else
			{
				ok++;
			}
		}
		//最后全为偶数 
//		if(ok == n)
//		{
//			for(i = 0;i<n-1;i++)
//			{
//				if(a[i]-a[i+1] == 0)
//				{
//					continue;
//				}	
//				else
//				{
//					sum = sum + abs(a[i]-a[i+1]);
//					if(a[i]>a[i+1])
//					{
//						a[i+1] = a[i] - a[i+1] + a[i+1];
//					}
//					else
//					{
//						a[i] = a[i+1] - a[i]+a[i];
//					}
//				}
//			} 
//		}
	}
	cout<<sum<<endl;
	return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »