AtCoder Beginner Contest 325
A - Takahashi san
苗字と名前がそれぞれ与えられるので、" san"をつけて出力する。
int main()
{
string S, T;
cin >> S >> T;
cout << S << " san" << endl;
return 0;
}
B - World Meeting
世界 $N$ 拠点の人数と、標準時間からのズレが与えられる。9時から18時に完全に収まるように1時間のMTGを開くとき、最大の参加人数は何人になるか、という問題。
開始時間の選択肢は0時から23時までの24パターンしかないので、それぞれの時間における参加可能人数を求めて、最大の場合を出力する。
int main()
{
int N;
cin >> N;
vector<int> num_member(N);
vector<int> time_kyoten(N);
for (int i = 0; i < N; i++) cin >> num_member[i] >> time_kyoten[i];
// それぞれの時間で参加可能な人数を求める
int max_num = 0;
for (int k = 0; k < 24; k++)
{
int tmp = 0;
for (int i = 0; i < N; i++)
{
int tmp_time = (time_kyoten[i] + k) % 24;
if (tmp_time >= 9 && tmp_time < 18) tmp += num_member[i];
}
max_num = max(max_num, tmp);
}
cout << max_num << endl;
return 0;
}
C - Sensors
再帰関数で繋がっている領域を全てチェックし、繋がっていない場所の個数をカウントする。
int H, W;
bool board[1009][1009];
void ft_check(int x, int y)
{
board[x][y] = false;
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
int nx = x + i;
int ny = y + j;
if (nx >= 0 && nx < H && ny >= 0 && ny < W && board[nx][ny])
{
ft_check(nx, ny);
}
}
}
}
int main()
{
cin >> H >> W;
vector<string> S(H);
for (int i = 0; i < H; i++) cin >> S[i];
// 盤面の整理
for (int i = 0; i < H; i++)
{
for (int j = 0; j < W; j++)
{
if (S[i][j] == '#') board[i][j] = true;
else board[i][j] = false;
}
}
// センサの単位がいくつあるかチェック
int ans = 0;
for (int i = 0; i < H; i++)
{
for (int j = 0; j < W; j++)
{
if (board[i][j])
{
ans++;
ft_check(i, j);
}
}
}
cout << ans << endl;
return 0;
}