結果
| 問題 | No.1299 Random Array Score | 
| コンテスト | |
| ユーザー |  nok0 | 
| 提出日時 | 2020-11-06 09:34:18 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 32 ms / 2,000 ms | 
| コード長 | 2,967 bytes | 
| コンパイル時間 | 2,051 ms | 
| コンパイル使用メモリ | 191,256 KB | 
| 最終ジャッジ日時 | 2025-01-15 20:01:20 | 
| ジャッジサーバーID (参考情報) | judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 34 | 
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:137:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  137 |         scanf("%d%lld", &n, &k);
      |         ~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:140:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  140 |                 scanf("%d", &a);
      |                 ~~~~~^~~~~~~~~~
            
            ソースコード
#include <bits/stdc++.h>
//ModInt
template <const int& mod>
struct ModInt {
private:
	int x;
public:
	ModInt() : x(0) {}
	ModInt(long long x_) {
		if((x = x_ % mod + mod) >= mod) x -= mod;
	}
	int val() const { return x; }
	static int get_mod() { return mod; }
	constexpr ModInt& operator+=(ModInt rhs) {
		if((x += rhs.x) >= mod) x -= mod;
		return *this;
	}
	constexpr ModInt& operator-=(ModInt rhs) {
		if((x -= rhs.x) < 0) x += mod;
		return *this;
	}
	constexpr ModInt& operator*=(ModInt rhs) {
		x = (unsigned long long)x * rhs.x % mod;
		return *this;
	}
	constexpr ModInt& operator/=(ModInt rhs) {
		x = (unsigned long long)x * rhs.inv().x % mod;
		return *this;
	}
	constexpr ModInt operator-() const noexcept { return -x < 0 ? mod - x : -x; }
	constexpr ModInt operator+(ModInt rhs) const noexcept { return ModInt(*this) += rhs; }
	constexpr ModInt operator-(ModInt rhs) const noexcept { return ModInt(*this) -= rhs; }
	constexpr ModInt operator*(ModInt rhs) const noexcept { return ModInt(*this) *= rhs; }
	constexpr ModInt operator/(ModInt rhs) const noexcept { return ModInt(*this) /= rhs; }
	constexpr ModInt& operator++() {
		*this += 1;
		return *this;
	}
	constexpr ModInt operator++(int) {
		*this += 1;
		return *this - 1;
	}
	constexpr ModInt& operator--() {
		*this -= 1;
		return *this;
	}
	constexpr ModInt operator--(int) {
		*this -= 1;
		return *this + 1;
	}
	bool operator==(ModInt rhs) const { return x == rhs.x; }
	bool operator!=(ModInt rhs) const { return x != rhs.x; }
	bool operator<=(ModInt rhs) const { return x <= rhs.x; }
	bool operator>=(ModInt rhs) const { return x >= rhs.x; }
	bool operator<(ModInt rhs) const { return x < rhs.x; }
	bool operator>(ModInt rhs) const { return x > rhs.x; }
	ModInt inv() {
		int a = x, b = mod, u = 1, v = 0, t;
		while(b > 0) {
			t = a / b;
			std::swap(a -= t * b, b);
			std::swap(u -= t * v, v);
		}
		return ModInt(u);
	}
	ModInt pow(long long n) const {
		ModInt ret(1), mul(x);
		while(n > 0) {
			if(n & 1) ret *= mul;
			mul *= mul;
			n >>= 1;
		}
		return ret;
	}
	ModInt sqrt() const {
		if(x <= 1) return x;
		int v = (mod - 1) / 2;
		if(pow(v) != 1) return -1;
		int q = mod - 1, m = 0;
		while(~q & 1) q >>= 1, m++;
		std::mt19937 mt;
		ModInt z = mt();
		while(z.pow(v) != mod - 1) z = mt();
		ModInt c = z.pow(q), t = pow(q), r = pow((q + 1) / 2);
		for(; m > 1; m--) {
			ModInt tmp = t.pow(1 << (m - 2));
			if(tmp != 1) r = r * c, t = t * c * c;
			c = c * c;
		}
		return std::min(r.x, mod - r.x);
	}
	friend std::ostream& operator<<(std::ostream& s, ModInt<mod> a) {
		s << a.x;
		return s;
	}
	friend std::istream& operator>>(std::istream& s, ModInt<mod>& a) {
		s >> a.x;
		return s;
	}
};
static int MOD = 998244353;
using mint = ModInt<MOD>;
mint res, two = 2;
int n, a;
long long k;
int main() {
	scanf("%d%lld", &n, &k);
	for(int i = 0; i < n; i++) {
		scanf("%d", &a);
		res += a;
	}
	res *= two.pow(k);
	std::cout << res << "\n";
}
            
            
            
        