Submission #8622283


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
#define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define loop(i,a,b) for(int i=a;i<b;i++)
#define test() int t;cin>>t;loop(test,1,t+1)
#define pb push_back
#define eb emplace_back
#define mkp make_pair
#define nl cout<<"\n"
#define sp cout<<" "
#define F first
#define S second
#define vi vector<int>
#define vl vector<ll>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vii vector<pii>
#define vll vector<pll>
#define MOD 1000000007
#define all(x) x.begin(),x.end()

template<class C> void min_self( C &a, C b ){ a = min(a,b); }
template<class C> void max_self( C &a, C b ){ a = max(a,b); }

ll mod( ll n, ll m=MOD ){ n%=m,n+=m,n%=m;return n; }

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }
    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};

unordered_map<long long, int, custom_hash> safe_map;

const int MAXN = 1e5+5;
const int LOGN = 21;
const ll INF = 1e14;
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};

int main() 
{
    fastio();

    ll n,k;
    cin>>n>>k;
    vector<ll>a(n), pref(n+1);
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        pref[i+1] = mod( pref[i] + a[i], k );
    }

    for(int i=1;i<=n;i++)
    {
        pref[i] = mod( pref[i]-i, k);
    }

    map<ll,ll>fr;
    ll cur = 0;
    ll ans = 0;
    for(int i=n;i>=0;i--)
    {
        ans += fr[pref[i]];

        fr[pref[i]]++;
        cur++;
        while( cur >= k )
        {
            fr[pref[i+k-1]]--;
            cur--;
        }
    }
    cout<<ans,nl;

    return 0;
}

Submission Info

Submission Time
Task E - Rem of Sum is Num
User gupta_samarth
Language C++14 (GCC 5.4.1)
Score 500
Code Size 2162 Byte
Status AC
Exec Time 183 ms
Memory 15872 KiB

Judge Result

Set Name sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 29
Set Name Test Cases
sample sample01, sample02, sample03
All few01, few02, few03, hand01, hand02, hand03, hand04, large01, large02, large03, max01, max02, max03, mid01, mid02, mid03, mid04, mid05, min01, min02, min03, sample01, sample02, sample03, small01, small02, small03, small04, small05
Case Name Status Exec Time Memory
few01 AC 23 ms 3328 KiB
few02 AC 29 ms 3328 KiB
few03 AC 30 ms 3328 KiB
hand01 AC 1 ms 256 KiB
hand02 AC 32 ms 3328 KiB
hand03 AC 34 ms 3328 KiB
hand04 AC 32 ms 3456 KiB
large01 AC 118 ms 14464 KiB
large02 AC 135 ms 15872 KiB
large03 AC 126 ms 15360 KiB
max01 AC 99 ms 15872 KiB
max02 AC 92 ms 15872 KiB
max03 AC 183 ms 15872 KiB
mid01 AC 2 ms 256 KiB
mid02 AC 2 ms 384 KiB
mid03 AC 2 ms 384 KiB
mid04 AC 2 ms 384 KiB
mid05 AC 2 ms 384 KiB
min01 AC 39 ms 2560 KiB
min02 AC 37 ms 2432 KiB
min03 AC 41 ms 2560 KiB
sample01 AC 1 ms 256 KiB
sample02 AC 1 ms 256 KiB
sample03 AC 1 ms 256 KiB
small01 AC 1 ms 256 KiB
small02 AC 1 ms 256 KiB
small03 AC 1 ms 256 KiB
small04 AC 1 ms 256 KiB
small05 AC 1 ms 256 KiB