TopCoder SRM 356 Div1 Easy AverageProblem

問題

n人にアンケートをした。m個の質問に対して、
それぞれの人は0〜10までの数字を答えた。


それぞれの質問に対する答えの平均値が、
小数点以下3桁未満を切り捨てて与えられる。


このとき、nとしてありうる数は最低でいくつか、求めよ。

制約条件

m≦2500くらい?

方針

人数は1000人いれば必ずどんな小数点以下3桁の値も作れるので、
1000人以下の人数で適切なnを探してやればよい。


平均値がaであるような質問に対して、数値の合計値をxとすると、
x/n=a+(三桁未満)……
となっているはずで、1000*x/n=a+(小数点以下)になっている。
なので、xはa*n/1000を切り上げたものになるはず。


このxから、平均値を逆算したときにaになっていればおk.

ソースコード

class AverageProblem {
	public:
	int numberOfParticipants(vector <string> marks) 
	{
		string s;
		rep(i,marks.size())s+=" "+marks[i];
		stringstream ss(s);
		vi nums;
		while(ss>>s){
			int x,y;
			sscanf(s.c_str(),"%d.%d",&x,&y);
			nums.pb(x*1000+y);
		}
		int n=nums.size();
		for(int i=1;i<=1000;i++){
			rep(j,n){
				int x=(i*nums[j]+999)/1000;
				if(1000*x/i!=nums[j])goto NEXT;
			}
			return i; NEXT:;
		}
	}
};