結果
問題 | No.1336 Union on Blackboard |
ユーザー |
|
提出日時 | 2021-01-15 21:36:03 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 5,673 bytes |
コンパイル時間 | 2,368 ms |
コンパイル使用メモリ | 196,268 KB |
最終ジャッジ日時 | 2025-01-17 18:42:36 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 31 |
ソースコード
#include <bits/stdc++.h>#ifdef DEBUG#include <Mylib/Debug/debug.cpp>#else#define dump(...) ((void)0)#endiftemplate <typename T, typename U>bool chmin(T &a, const U &b){return (a > b ? a = b, true : false);}template <typename T, typename U>bool chmax(T &a, const U &b){return (a < b ? a = b, true : false);}template <typename T, size_t N, typename U>void fill_array(T (&a)[N], const U &v){std::fill((U*)a, (U*)(a + N), v);}template <typename T, size_t N, size_t I = N>auto make_vector(const std::array<int, N> &a, T value = T()){static_assert(I >= 1);static_assert(N >= 1);if constexpr (I == 1){return std::vector<T>(a[N - I], value);}else{return std::vector(a[N - I], make_vector<T, N, I - 1>(a, value));}}template <typename T>std::ostream& operator<<(std::ostream &s, const std::vector<T> &a){for(auto it = a.begin(); it != a.end(); ++it){if(it != a.begin()) s << " ";s << *it;}return s;}template <typename T>std::istream& operator>>(std::istream &s, std::vector<T> &a){for(auto &x : a) s >> x;return s;}std::string YesNo(bool value){return value ? "Yes" : "No";}std::string YESNO(bool value){return value ? "YES" : "NO";}std::string yesno(bool value){return value ? "yes" : "no";}template <typename T>void putl(const T &value){std::cout << value << "\n";}template <typename Head, typename ... Tail>void putl(const Head head, const Tail &... tail){std::cout << head << " ";putl(tail ...);}namespace haar_lib {template <int32_t M>class modint {uint32_t val_;public:constexpr static auto mod(){return M;}constexpr modint(): val_(0){}constexpr modint(int64_t n){if(n >= M) val_ = n % M;else if(n < 0) val_ = n % M + M;else val_ = n;}constexpr auto& operator=(const modint &a){val_ = a.val_; return *this;}constexpr auto& operator+=(const modint &a){if(val_ + a.val_ >= M) val_ = (uint64_t)val_ + a.val_ - M;else val_ += a.val_;return *this;}constexpr auto& operator-=(const modint &a){if(val_ < a.val_) val_ += M;val_ -= a.val_;return *this;}constexpr auto& operator*=(const modint &a){val_ = (uint64_t)val_ * a.val_ % M;return *this;}constexpr auto& operator/=(const modint &a){val_ = (uint64_t)val_ * a.inv().val_ % M;return *this;}constexpr auto operator+(const modint &a) const {return modint(*this) += a;}constexpr auto operator-(const modint &a) const {return modint(*this) -= a;}constexpr auto operator*(const modint &a) const {return modint(*this) *= a;}constexpr auto operator/(const modint &a) const {return modint(*this) /= a;}constexpr bool operator==(const modint &a) const {return val_ == a.val_;}constexpr bool operator!=(const modint &a) const {return val_ != a.val_;}constexpr auto& operator++(){*this += 1; return *this;}constexpr auto& operator--(){*this -= 1; return *this;}constexpr auto operator++(int){auto t = *this; *this += 1; return t;}constexpr auto operator--(int){auto t = *this; *this -= 1; return t;}constexpr static modint pow(int64_t n, int64_t p){if(p < 0) return pow(n, -p).inv();int64_t ret = 1, e = n % M;for(; p; (e *= e) %= M, p >>= 1) if(p & 1) (ret *= e) %= M;return ret;}constexpr static modint inv(int64_t a){int64_t b = M, u = 1, v = 0;while(b){int64_t t = a / b;a -= t * b; std::swap(a, b);u -= t * v; std::swap(u, v);}u %= M;if(u < 0) u += M;return u;}constexpr static auto frac(int64_t a, int64_t b){return modint(a) / modint(b);}constexpr auto pow(int64_t p) const {return pow(val_, p);}constexpr auto inv() const {return inv(val_);}friend constexpr auto operator-(const modint &a){return modint(M - a.val_);}friend constexpr auto operator+(int64_t a, const modint &b){return modint(a) + b;}friend constexpr auto operator-(int64_t a, const modint &b){return modint(a) - b;}friend constexpr auto operator*(int64_t a, const modint &b){return modint(a) * b;}friend constexpr auto operator/(int64_t a, const modint &b){return modint(a) / b;}friend std::istream& operator>>(std::istream &s, modint &a){s >> a.val_; return s;}friend std::ostream& operator<<(std::ostream &s, const modint &a){s << a.val_; return s;}template <int N>static auto div(){static auto value = inv(N);return value;}explicit operator int32_t() const noexcept {return val_;}explicit operator int64_t() const noexcept {return val_;}};}namespace haar_lib {}namespace solver {using namespace haar_lib;constexpr int m1000000007 = 1000000007;constexpr int m998244353 = 998244353;void init(){std::cin.tie(0);std::ios::sync_with_stdio(false);std::cout << std::fixed << std::setprecision(12);std::cerr << std::fixed << std::setprecision(12);std::cin.exceptions(std::ios_base::failbit);}using mint = modint<m1000000007>;void solve(){int T; std::cin >> T;while(T--){int N; std::cin >> N;std::vector<int> A(N); std::cin >> A;mint ans = 0;for(int i = 0; i < N; ++i){ans = (ans + A[i]) + (ans * A[i]);}std::cout << ans << "\n";}}}int main(){solver::init();while(true){try{solver::solve();std::cout << std::flush;std::cerr << std::flush;}catch(const std::istream::failure &e){break;}catch(...){break;}}return 0;}