kmjp's blog

競技プログラミング参加記です

TopCoder SRM 567 Div2 Easy NinjaTurtles

Div2も練習。
http://community.topcoder.com/stat?c=problem_statement&pm=12376

PとKが与えられるので、3*(N/K)+(N/3)==PとなるようなNを求める問題。
上の式を変形するとN=3KP/(9+K)。
分数で小数点以下を切り擦れる処理を考慮して、上記Nの周辺を探索して3*(N/K)+(N/3)==PとなるNを探せばよい。

class NinjaTurtles {
	public:
	int countOpponents(int P, int K) {
		int N,TN;

		TN=3*K*P/(9+K);
		for(N=TN-2*K;N<=TN+2*K;N++) if(N/3+(N/K)*3 == P) return N;

		return -1;
	}
};

まとめ

Div2 Easyとしては珍しいタイプの問題な気がする。