记录编号 91437 评测结果 WWWTTTWTTT
题目名称 [UVa 11300]分金币 最终得分 0
用户昵称 Gravatarwolf 是否通过 未通过
代码语言 C++ 运行时间 7.789 s
提交时间 2014-03-14 19:15:07 内存使用 0.28 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
vector<int> people;
vector<int> sum;
vector<int> number;
void work(int no,int n,int eq){
	int AA=no;
	int BB=no;
	int rest=people[no]-eq;
	int distrance1,distrance2,a;
	for(int i=0;i!=n/2;i++){
		--AA;
		++BB;
		if(AA==-1)
			AA=n-i;
		if(BB==n)
			BB=0;
		if(people[AA]<eq){
			a=eq-people[AA];
			if(AA>no)
				distrance1=no+n-AA;
			else
				distrance1=no-AA;
			if(rest>=a){
				rest-=a;
				people[AA]+=a;
				sum.push_back(distrance1*a);
			}else{
				people[AA]+=rest;
				sum.push_back(distrance1*rest);
				rest=0;
				break;
			}
		}
		if(people[BB]<eq){
			a=eq-people[BB];
			if(BB<no)
				distrance2=n-no+BB;
			else
				distrance2=BB-no;
			if(rest>=a){
				rest-=a;
				people[BB]+=a;
				sum.push_back(distrance2*a);
			}else{
				people[BB]+=rest;
				sum.push_back(distrance2*rest);
				rest=0;
				break;
			}
		}
	}
	people[no]=eq;
}
int main(){
	ifstream AA("Wealth.in");
	ofstream BB("Wealth.out");
	int equally;
	int n,all=0,a=0,b;
	while(AA>>n){
		if(n==0)
			continue;
		for(int i=0;i!=n;i++){
			AA>>b;
			people.push_back(b);
		}
		for(int i=0;i!=n;i++){
			all+=people[i];
		}
		equally=all/n;//平均值求值结束
		///////////error
		for(int i=0;i!=n;i++){
			int e=equally;
			int t=0;
			for(int q=0;q!=n;q++){
				if(people[q]>e){
					e=people[q];
					t=q;
				}
			}
			work(t,n,equally);
		}
		///////////
		for(int i=0;i!=sum.size();i++){
			a+=sum[i];
		}
		sum.resize(0);
		people.resize(0);
		number.push_back(a);
		all=0;
		a=0;
	}
	for(int i=0;i!=number.size();i++){
		BB<<number[i]<<endl;
	}
	return 0;
}