kmjp's blog

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

AtCoder ARC #026 : A - ダイナミックなポーズ、B - 完全数

ARC026に参加。
Cまでは順調に解いたものの、Dが部分点しか取れず微妙な順位に。
http://arc026.contest.atcoder.jp/tasks/arc026_1
http://arc026.contest.atcoder.jp/tasks/arc026_2

A - ダイナミックなポーズ

1問問題を解くのにA分かかる。
ただし最大5問までは1問B分(B

int N,A,B;

void solve() {
	int f,i,j,k,l,x,y;
	cin>>N>>A>>B;
	x=min(N,5);
	cout << x*B+(N-x)*A << endl;
}

B - 完全数

整数Nが完全数・過剰数・不足数のいずれか答えよ。

O(√N)で約数を列挙すればよい。

ll N;

void solve() {
	int f,i,j,k,l,x,y;
	ll ret=1;
	cin>>N;
	ll xx;
	
	for(xx=2;xx*xx<=N;xx++) {
		if(N%xx==0) {
			if(xx*xx==N) ret += xx;
			else ret += xx+N/xx;
		}
	}
	if(N==1) return _P("Deficient\n");
	if(ret==N) _P("Perfect\n");
	else if(ret<N) _P("Deficient\n");
	else _P("Abundant\n");
}

まとめ

ここまではすんなり。