結果

問題 No.434 占い
ユーザー pekempeypekempey
提出日時 2016-10-17 04:20:23
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 157 ms / 2,000 ms
コード長 2,427 bytes
コンパイル時間 1,767 ms
コンパイル使用メモリ 176,652 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-22 12:52:30
合計ジャッジ時間 3,730 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 9 ms
5,248 KB
testcase_01 AC 9 ms
5,248 KB
testcase_02 AC 9 ms
5,248 KB
testcase_03 AC 9 ms
5,248 KB
testcase_04 AC 9 ms
5,248 KB
testcase_05 AC 9 ms
5,248 KB
testcase_06 AC 11 ms
5,248 KB
testcase_07 AC 9 ms
5,248 KB
testcase_08 AC 10 ms
5,248 KB
testcase_09 AC 10 ms
5,248 KB
testcase_10 AC 10 ms
5,248 KB
testcase_11 AC 11 ms
5,248 KB
testcase_12 AC 24 ms
5,248 KB
testcase_13 AC 10 ms
5,248 KB
testcase_14 AC 10 ms
5,248 KB
testcase_15 AC 17 ms
5,248 KB
testcase_16 AC 17 ms
5,248 KB
testcase_17 AC 17 ms
5,248 KB
testcase_18 AC 19 ms
5,248 KB
testcase_19 AC 32 ms
5,248 KB
testcase_20 AC 157 ms
5,248 KB
testcase_21 AC 17 ms
5,248 KB
testcase_22 AC 17 ms
5,248 KB
testcase_23 AC 9 ms
5,248 KB
testcase_24 AC 17 ms
5,248 KB
testcase_25 AC 18 ms
5,248 KB
testcase_26 AC 13 ms
5,248 KB
testcase_27 AC 19 ms
5,248 KB
testcase_28 AC 20 ms
5,248 KB
testcase_29 AC 37 ms
5,248 KB
testcase_30 AC 126 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

struct CombinationAnyMod {
	struct CombinationPrimePower {
		int p, q;
		int mod;
		vector<int> F, invF, power, e;

		static pair<int, int> extgcd(int a, int b) {
			if (b == 0) return make_pair(1, 0);
			int x, y;
			tie(x, y) = extgcd(b, a % b);
			return make_pair(y, x - a / b * y);
		}

		static int modulo(int a, int mod) {
			return (a %= mod) < 0 ? a + mod : a;
		}

		static int modinv(int a, int mod) {
			return modulo(extgcd(a, mod).first, mod);
		}

		int mul(int x, int y) {
			return int64_t(x) * y % mod;
		}

		CombinationPrimePower(int n, int p, int q) : p(p), q(q), F(n), invF(n), e(n), power(q + 1) {
			mod = 1;
			for (int i = 0; i < q; i++) mod *= p;

			power[0] = 1;
			for (int i = 1; i <= q; i++) power[i] = mul(power[i - 1], p);

			F[0] = 1;
			for (int i = 1; i < n; i++) {
				F[i] = mul(F[i - 1], i % p == 0 ? 1 : i);
			}

			invF[n - 1] = modinv(F[n - 1], mod);
			for (int i = n - 2; i >= 0; i--) {
				invF[i] = mul(invF[i + 1], (i + 1) % p == 0 ? 1 : i + 1);
			}

			for (int i = 1; i < n; i++) {
				F[i] = mul(F[i], F[i / p]);
				invF[i] = mul(invF[i], invF[i / p]);
				e[i] = i / p + e[i / p];
			}
		}

		int operator()(int n, int r) {
			if (n < 0 || r < 0 || n < r) return 0;
			int f = mul(F[n], mul(invF[n - r], invF[r]));
			return mul(f, power[min(q, e[n] - e[n - r] - e[r])]);
		}
	};

	map<int, int> prime_factors(int n) {
		map<int, int> res;
		for (int i = 2; i * i <= n; i++) {
			for (; n % i == 0; n /= i) res[i]++;
		}
		if (n != 1) res[n] = 1;
		return res;
	}

	vector<CombinationPrimePower> cs;
	vector<int> inv;

	CombinationAnyMod(int n, int mod) {
		for (auto kv : prime_factors(mod)) {
			cs.emplace_back(n, kv.first, kv.second);
		}
		int m = 1;
		for (auto &c : cs) {
			inv.push_back(CombinationPrimePower::modinv(m, c.mod));
			m *= c.mod;
		}
	}

	int operator()(int n, int r) {
		int x = 0;
		int mod = 1;
		for (int i = 0; i < cs.size(); i++) {
			int y = cs[i](n, r);
			x += int64_t(y + cs[i].mod - x) * inv[i] % cs[i].mod * mod;
			mod *= cs[i].mod;
		}
		return x;
	}
};

int main() {
	int T;
	cin >> T;

	CombinationAnyMod cb(101010, 9);

	while (T--) {
		string s;
		cin >> s;

		int n = s.size();

		int ans = 0;
		for (int i = 0; i < n; i++) {
			(ans += cb(n - 1, i) * (s[i] - '0')) %= 9;
		}
		if (ans == 0) ans = 9;

		if (count(s.begin(), s.end(), '0') == n) ans = 0;
		printf("%d\n", ans);
	}
}
0