kmjp's blog

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

VolBIT Formulas Blitz : A-F

あまりコード量の多くないネタコンテスト。
全体的にスムーズに行ったが、批判の多いE問題で大量WAした上で勘ACをとったため、全完勢としては微妙な順位。
http://codeforces.com/contest/630/problem/A
http://codeforces.com/contest/630/problem/B
http://codeforces.com/contest/630/problem/C
http://codeforces.com/contest/630/problem/D
http://codeforces.com/contest/630/problem/E
http://codeforces.com/contest/630/problem/F


解法のみ簡潔に書いていきます。

A. Again Twenty Five!

5^Nの下2桁を答える問題。Nは2以上なので25固定。

void solve() {
	cout<<25<<endl;
}

B. Moore's Law

n*(1.000000011^t)を答えるだけ。

void solve() {
	ll N,T;
	cin>>N>>T;
	_P("%.12lf\n",N*pow(1.000000011,T));
}

C. Lucky Numbers

k桁のLucky Numbersは2^k個あるので、n桁以下のLucky numbersは2^(n+1)-2個。

void solve() {
	int N;
	cin>>N;
	cout<<((1LL<<(N+1))-2)<<endl;
}

D. Hexagons!

中央から距離dのセルは6d個あるので、3*n*(n+1)+1を答えればよい。
d==0のときだけはセルは1個である。

void solve() {
	ll N;
	cin>>N;
	cout<<3*N*(N+1)+1<<endl;
}

E. A rectangle

矩形内の格子点について、パリティが条件を満たす点を数える問題。
例文を見ると(0,0)がセルの中央にくるように見えるが、問題文を見ると一応(x1,y1)はセルの中央となるためx1,y1の偶奇によっては(0,0)がセルの中央に粉移転に注意。
正直問題設定がひどいと思う。

ll X1,X2,Y1,Y2;
ll ret;

void solve() {
	int i,j,k,l,r,x,y; string s;
	cin>>X1>>Y1>>X2>>Y2;
	
	if((Y2-Y1)%2==1) ret=(X2-X1+1)*((Y2-Y1+1)/2);
	else {
		ret=(X2-X1+1)*((Y2-Y1)/2)+(X2-X1)/2+1;
	}
	cout<<ret<<endl;
}

F. Selection of Personnel

 {}_N_5 + {}_N_6 + {}_N_7を求めよう。

void solve() {
	ll N,ret=0;
	int i,x;
	
	cin>>N;
	for(i=5;i<=7;i++) {
		ll r=1;
		FOR(x,i) r*=N-x, r/=x+1;
		ret+=r;
	}
	cout<<ret<<endl;
}

まとめ

E以外は良かったんだけどな。