AtCoder振り返りその5(AtCoder Beginner Contest 308)

まえがき

競技プログラミング振り返り5回目となります。
今回解けたのはA,B問です、以下はその内容の振り返りとなります。

A問(New Scheme)

問題はこちら→A - New Scheme

与えられた数字がすべての条件を満たすか確認するだけですね。

A問提出コード

#include <stdio.h>

int main(void)
{
	int s;
	int temp = 100;
	for (int i = 0; i < 8; i++)
	{
		scanf("%d", &s);
		if (s%25 != 0 || s <temp || s>675 )
		{
			printf("No\n");
			return 0;
		};
		temp = s;
	}
	printf("Yes\n");
	return 0;
}

条件の中で数字が抗議単調増加であること前提とした場合、始めの数字のみ100以上であればよいため
tempに100を入れて置き条件を満たしていれば比較した数字を入れて次の数字の入力に移る形となります。
tempという変数名よりかminなどのほうが適切だったかもしれません。

B問(Default Price)

問題はこちら→B - Default Price

回転寿司でたべたお皿の合計を出す問題です。
食べたお皿ごとに金額が違うためそれを踏まえて合計をだします。

B問提出コード

#include <stdio.h>
#include <string.h>

int main(void)
{
	int n, m;
	char c[100][21]={ 0 };
	char d[100][21]={ 0 };
	int p[100];
	int ans =0;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++)
	{
		scanf("%s", &c[i]);
	}
	for (int i = 0; i < m; i++)
	{
		scanf("%s", &d[i]);
	}
	for (int i = 0; i < m+1; i++)
	{
		scanf("%d", &p[i]);
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (!strcmp(c[i], d[j])) {
				ans += p[j+1];
				break;
			}
			if (m - 1 == j)
			{
				ans += p[0];
			}
		}
	}
	printf("%d", ans);

	return 0;
}

入力後に二重for文内でstrcmpを使い照合しています。

感想

C問に挑戦してみましたが、ソートにバブルソートを使用し時間超過のためできませんでした。
バブルソート以外のソートを使えるようになるべきですね。

/* -----codeの行番号----- */