제출 #1058812

#제출 시각아이디문제언어결과실행 시간메모리
1058812TonylTrains (BOI24_trains)C++17
100 / 100
448 ms191916 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using pi = pair<int,int>;
#define REP(i,n) for (int i = 0; i < n; i++)
#define trav(a,x) for (auto& a : x)
#define D(x) cerr << #x << ": " << x << endl;
#define all(x) (x).begin(), (x).end()

const int MOD = 1e9+7;
const int MAX_N = 1e5+1;
const int SQRT = 320;

struct Prefix {
    vi pr = {0};

    int q(int x) {
        if (x <= 0) return 0;
        int r = pr.back();
        int l = pr.size()>x ? pr[pr.size()-1-x] : 0;
        return (MOD+r-l)%MOD;
    }

    void add(int a) {
        pr.push_back((pr.back()+a)%MOD);
    }
};

struct Station {
    int d, x;
};

Station stations[MAX_N];
Prefix prsq[SQRT][SQRT+1];
int totals[MAX_N];

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);

    int n; cin >> n;
    REP(i,n) {
        cin >> stations[i].d >> stations[i].x;
    }

    for (int i = n-1; i >= 0; i--) {
        Station& st = stations[i];
        int tot = 1;
        if (st.d >= SQRT) {
            int j = i+st.d;
            while (j < n && st.x--) {
                tot += totals[j];
                j += st.d;
                tot %= MOD;
            }
        } else if (st.d != 0) tot = prsq[st.d-1][i%st.d].q(st.x)+1;
        for (int s = 0; s < SQRT; s++) {
            int sq = s+1;
            int md = i%sq;
            prsq[s][md].add(tot);
        }
        totals[i] = tot;
    }

    cout << totals[0] << endl;

}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In member function 'int Prefix::q(int)':
Main.cpp:21:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   21 |         int l = pr.size()>x ? pr[pr.size()-1-x] : 0;
      |                 ~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...