kmjp's blog

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

AtCoder ARC #012 : A - 週末、B - アキレスと亀

ARC #012は不参加なので練習のみ。
まずは2問まとめて。
http://arc012.contest.atcoder.jp/tasks/arc012_1
http://arc012.contest.atcoder.jp/tasks/arc012_2

A - 週末

曜日が文字列で与えられるので、週末までの日数を答える。

文字列別の日数を覚えておき、文字列に対応する値を返せばよい。
配列で書いてもいいけど面倒なのでif文を7つ書いた。
スペルミスに要注意だね。

void solve() {
	char str[20];
	int f,r,i,j,k,l;
	
	GETs(str);
	
	if(strcmp(str,"Monday")==0) _P("5\n");
	if(strcmp(str,"Tuesday")==0) _P("4\n");
	if(strcmp(str,"Wednesday")==0) _P("3\n");
	if(strcmp(str,"Thursday")==0) _P("2\n");
	if(strcmp(str,"Friday")==0) _P("1\n");
	if(strcmp(str,"Saturday")==0) _P("0\n");
	if(strcmp(str,"Sunday")==0) _P("0\n");
	return;
}

B - アキレスと亀

最初人と亀が距離L離れている。人は速度Va、亀が速度Vbで動く。
人が亀の位置に到達したとき、亀は少し動いている。この作業をN回繰り返した後の人と亀の距離を答える。

1回人が亀の位置に到達すると、残りの距離はVb/Va倍に縮まる。
よってL*(Vb/Va)^Nを返せばよい。

int N;
double Va,Vb,L;

void solve() {
	int f,r,i,j,k,l;
	char str[100];
	
	N=GETi();
	Va=GETi();
	Vb=GETi();
	L=GETi();
	
	FOR(i,N) L=L*Vb/Va;
	_P("%.12lf\n",L);
	return;
}

まとめ

今回のA,Bはいつもに比べて簡単?