結果

問題 No.2111 Sum of Diff
ユーザー YoureinYourein
提出日時 2022-10-28 22:14:21
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 376 ms / 2,000 ms
コード長 5,823 bytes
コンパイル時間 8,506 ms
コンパイル使用メモリ 484,972 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-06 01:24:24
合計ジャッジ時間 13,482 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 2 ms
6,812 KB
testcase_02 AC 375 ms
6,940 KB
testcase_03 AC 250 ms
6,944 KB
testcase_04 AC 46 ms
6,940 KB
testcase_05 AC 374 ms
6,944 KB
testcase_06 AC 376 ms
6,940 KB
testcase_07 AC 83 ms
6,940 KB
testcase_08 AC 118 ms
6,940 KB
testcase_09 AC 21 ms
6,940 KB
testcase_10 AC 30 ms
6,944 KB
testcase_11 AC 171 ms
6,944 KB
testcase_12 AC 164 ms
6,944 KB
testcase_13 AC 104 ms
6,940 KB
testcase_14 AC 303 ms
6,944 KB
testcase_15 AC 359 ms
6,940 KB
testcase_16 AC 145 ms
6,944 KB
testcase_17 AC 375 ms
6,940 KB
testcase_18 AC 107 ms
6,940 KB
testcase_19 AC 277 ms
6,940 KB
testcase_20 AC 375 ms
6,940 KB
testcase_21 AC 6 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <numeric>
#include <cassert>
#include <climits>
#include <limits>
#include <typeinfo>

#if __has_include(<boost/range/combine.hpp>)
#include <boost/range/combine.hpp> //Zip function for C++
#endif

#if __has_include(<boost/multiprecision/cpp_int.hpp>)
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
using pyint = boost::multiprecision::cpp_int;
using i128 = boost::multiprecision::int128_t;
using i256 = boost::multiprecision::int256_t;
using i512 = boost::multiprecision::int512_t;
using i1024 = boost::multiprecision::int1024_t;
using f50 = boost::multiprecision::cpp_dec_float_50;
using f100 = boost::multiprecision::cpp_dec_float_100;
#endif

//Binary Indexed Tree
// #include<ext/pb_ds/assoc_container.hpp>
// #include<ext/pb_ds/tree_policy.hpp>
// #include<ext/pb_ds/tag_and_trait.hpp>
// using namespace __gnu_pbds;
//Binary Indexed Tree

using i32 = int32_t;
using i64 = int64_t;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using namespace std;

#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()

//iostream operator
template <typename T> istream &operator>>(istream &is, vector<T> &x){for (auto &y:x){is >> y;} return is;}
template <typename T> ostream &operator<<(ostream &os, vector<T> &x){for (size_t e = 0; e < x.size(); e++){os << x[e] << (e==x.size()-1?"":" ");} return os;}
template <class T, class S> istream &operator>>(istream &is, pair<T, S> &x){is >> x.first >> x.second; return is;}
template <class T, class S> ostream &operator<<(ostream &os, pair<T, S> &x){os << x.first << " " << x.second; return os;}
//iostream operator

namespace cpio{
    //Debug out
    void dout(){cerr << "\n";}
    template<typename T, typename... Ts> void dout(const T& a, const Ts&... b){cerr << a; (cerr << ... << (cerr << ' ', b)); cerr << "\n";}

    //Yes or No
    void yon(bool yorn, string Y = "Yes", string N = "No"){cout << (yorn?Y:N) << endl;}
}; using namespace cpio;

namespace cpmath{
    //Math library for Competitive-Programming
    constexpr ll mod97 = 1000000007;
    constexpr ll mod99 = 1000000009;
    constexpr ll mod89 = 998244353;
    constexpr double pi = acos(-1);

    const int imax = numeric_limits<int>::max();
    const long long llmax = numeric_limits<long long>::max();
    const int safeimax = numeric_limits<int>::max()/2;
    const long long safellmax = numeric_limits<long long>::max()/2;

    constexpr int DX4[4] = {1, 0, -1, 0};
    constexpr int DY4[4] = {0, 1, 0, -1};
    constexpr int DX8[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
    constexpr int DY8[8] = {-1, -1, -1, 0, 0, 1, 1, 1};

    //Return a!/(b-1)! = a*(a-1)*...*(b+1)*b, O(a)
    ll factorial(ll a, ll b = -1, const ll fmod = -1){
        ll ans = 1;
        if (fmod > 1) {
            if (b == -1) for (ll i = a; i > 1; i--) ans = ((ans%fmod)*(i%fmod))%fmod;
            else for (ll i = a; i >= b; i--) ans = ((ans%fmod)*(i%fmod))%fmod;
        }
        else{
            if (b == -1) for (ll i = a; i > 1; i--) ans = ans*i;
            else for(ll i = a; i >= b; i--) ans = ans*i;
        }
        return ans;
    }

    //Return m^p, O(log p)
    ll fastpow(ll m, ll p){
        if (p == 0) return 1;
        if (p%2 == 0){ll t = fastpow(m, p/2); return t*t;}
        return m*fastpow(m, p-1);
    }

    ll modpow(ll m, ll p, const ll fmod){
        if (p == 0) return 1;

        if (m%fmod == 0) return 0;
        if (p%2 == 0){ll t = modpow(m, p/2, fmod); return (t*t)%fmod;}
        return (m*modpow(m, p-1, fmod))%fmod;
    }

    ld dtor(const ld deg){return deg*(pi/(ld)180);}

    template<class T> double fmedian(vector<T> a){return (static_cast<double>(a[((int(a.size())+1)/2)-1])+static_cast<double>(a[(int(a.size())/2)]))/2;}
    template<class T> pair<long long, long long> imedian(vector<T> a) {
        return {
            (static_cast<long long>(a[((int(a.size())+1)/2)-1])+static_cast<long long>(a[(int(a.size())/2)]))/2LL,
            (static_cast<long long>(a[((int(a.size())+1)/2)-1])+static_cast<long long>(a[(int(a.size())/2)])+1)/2LL,
        };
    }
    
    long long inversed(ll n, const ll mod){return cpmath::modpow(n, mod-2, mod);}
}

using cpmath::mod89;
using cpmath::mod97;
using cpmath::mod99;
using cpmath::imax;
using cpmath::llmax;
using cpmath::safeimax;
using cpmath::safellmax;

using cpmath::DX4;
using cpmath::DY4;
//using cpmath::DX8;
//using cpmath::DY8;

// using gtree = tree<T, null_type, greater<T>, rb_tree_tag, tree_order_statistics_node_update>;

void gutyoku(){
    int n;
    cin >> n;

    vector<int> a(n);
    cin >> a;

    int ans = 0;
    for (int i = 1; i < (1<<n); i++){
        vector<int> temp;
        int tempsum = 0;
        for (int j = 0; j < n; j++) {
            if (i&(1<<j)) {
                temp.push_back(a[j]);
            }
        }

        if (temp.size() >= 2) {
            for (int j = 0; j < temp.size()-1; j++) {
                tempsum += temp[j]-temp[j+1];
            }
        }

        cerr << temp << " : " << tempsum << endl;
        ans += tempsum;
    }

    cout << ans << endl;
}

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

    vector<int> a(n);
    cin >> a;

    ll ans = 0;

    for (int i = 0; i < n; i++){
        ll temp = cpmath::modpow(2, n-i-1, mod89) - 1;
        temp *= a[i];
        temp %= mod89;
        ans += temp;
        ans %= mod89;
    }

    for (int i = 0; i < n; i++) {
        ll temp = cpmath::modpow(2, i, mod89) - 1;
        temp *= a[i];
        temp %= mod89;
        ans -= temp;
        ans = (ans%mod89+mod89)%mod89;
    }

    cout << ans << endl;
}
0