Skip to content

Latest commit

 

History

History
63 lines (54 loc) · 1.12 KB

046.md

File metadata and controls

63 lines (54 loc) · 1.12 KB

046 - I Love 46 (★3)

解答

#include <iostream>
#include <vector>

int main()
{
	// 長さ N の数列
	int N;
	std::cin >> N;

	// A を % 46 の結果に応じて分類して, それぞれの個数を記録
	std::vector<int> am(46);
	for (int i = 0; i < N; ++i)
	{
		int a;
		std::cin >> a;
		++am[a % 46];
	}

	// B を % 46 の結果に応じて分類して, それぞれの個数を記録
	std::vector<int> bm(46);
	for (int i = 0; i < N; ++i)
	{
		int b;
		std::cin >> b;
		++bm[b % 46];
	}

	// C を % 46 の結果に応じて分類して, それぞれの個数を記録
	std::vector<int> cm(46);
	for (int i = 0; i < N; ++i)
	{
		int c;
		std::cin >> c;
		++cm[c % 46];
	}

	// 成立する組み合わせの合計数
	long long count = 0;

	for (int a = 0; a < 46; ++a)
	{
		for (int b = 0; b < 46; ++b)
		{
			for (int c = 0; c < 46; ++c)
			{
				// 合計が 46 の倍数になる (a, b, c) の組み合わせパターンであるなら
				if ((a + b + c) % 46 == 0)
				{
					count += (1LL * am[a] * bm[b] * cm[c]); // long long で計算
				}
			}
		}
	}

	// 解答を出力
	std::cout << count << '\n';
}