kmjp's blog

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

AtCoder ARC #018 : A - BMI、B - 格子点と整数

Codeforcesの2連勝がトラブルで巻き戻ってげんなりしている。
ARC018は不参加のため復習中。Dはまだ解いていない。
http://arc018.contest.atcoder.jp/tasks/arc018_1
http://arc018.contest.atcoder.jp/tasks/arc018_2

A - BMI

BMI(kg/m^2) = 体重(kg)/(身長(m)*身長(m))で表現される。
身長がcm単位で与えられ、BMI値が与えられたとき、体重を求めよ。

cmとmの違いに注意して計算するだけ。

void solve() {
	int f,i,j,k,l,x,y;
	double bmi,height;
	cin>>height>>bmi;
	_P("%.12lf\n",bmi*height*height/10000);
}
||

*B - 格子点と整数

いくつかの格子点の座標が与えられる。
ここから点を3つ選んだとき、面積が正の整数であるような選び方は何通りあるか。

点が100個しかないので総当たりで3つ選び、外積をとって絶対値が0より大きな整数となるものをカウントすればよい。

>|cpp|
void solve() {
	int f,i,j,k,l,x,y,z;
	int N,X[100],Y[100];
	cin>>N;
	FOR(i,N) cin>>X[i]>>Y[i];
	f=0;
	FOR(x,N) for(y=x+1;y<N;y++) for(z=y+1;z<N;z++) {
		ll area=(Y[z]-Y[x])*(ll)(X[y]-X[x])-(X[z]-X[x])*(ll)(Y[y]-Y[x]);
		if(area != 0 && area %2 == 0) f++;
	}
	cout << f << endl;
}

まとめ

地味にcmとmの変換を忘れてAに手間取った…。