問題A: 文字列照合判定
この問題では、文字列cの各文字が対応する位置の文字列aまたは文字列bのいずれかと一致するかを判定する必要があります。すべての文字が一致する場合は"NO"、そうでない場合は"YES"を出力します。
#include
#include
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int test_cases;
cin >> test_cases;
while (test_cases--) {
int length;
cin >> length;
string str_a, str_b, str_c;
cin >> str_a >> str_b >> str_c;
bool mismatch_found = false;
for (int i = 0; i < length; i++) {
if (str_c[i] != str_a[i] && str_c[i] != str_b[i]) {
mismatch_found = true;
break;
}
}
cout << (mismatch_found ? "YES" : "NO") << "\n";
}
return 0;
}
問題B: 三角形の組み合わせ数
この問題では、棒から三角形を作る場合の組み合わせ数を計算します。考えられるケースは2つです:
- 3本の同じ長さの棒(長さmの棒が3本以上ある場合、C(m,3)の組み合わせが可能)
- 2本の同じ長さの棒と、それより短い任意の長さの棒1本
組み合わせ数を計算する際には、各長さの棒の出現頻度をカウントし、組み合わせの公式を適用します。
#include
#include
#include
#include
問題C: 最寄り都市と累積コスト
この問題では、各地点の最寄り都市を特定し、前缀和と后缀和を利用して2地点間の移動コストを計算します。マップを使用して各地点に対応する最寄り都市を保存し、クエリに応じて効率的にコストを計算します。
#include
#include
#include