제출 #1268923

#제출 시각아이디문제언어결과실행 시간메모리
1268923top1svtinTrains (BOI24_trains)C++20
100 / 100
180 ms6216 KiB
#include <bits/stdc++.h>

#define kien long long
#define pii pair<int, int>
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define FORD(i, a, b) for (int i = a; i >= b; i--)
#define Million 1000000
const int MOD = 1e9 + 7;
const int MXN = 2e5 + 5;
const int BASE = 3137;

using namespace std;

kien dp[500][500], ans[200005];
priority_queue<pair<pair<kien,kien>,pair<kien,kien>>, vector<pair<pair<kien,kien>,pair<kien,kien>>>, greater<pair<pair<kien,kien>,pair<kien,kien>>>> ev;

main() {
    kien n; 
    cin >> n; 
    ans[1] = 1; 
    kien sum = 0;
    FOR (i, 1, n) {
        kien d, x; cin >> d >> x;
        for (kien j = 1; j*j < n; j++) {
            ans[i] += dp[i%j][j];
            ans[i] %= 1000000007;
        }
        if (d*d >= n) {
            for (kien j = 1; j <= x and i+j*d <= n; j++) {
            	ans[i+j*d] += ans[i];
            	ans[i+j*d] %= 1000000007;
            }
        } else if (d > 0) {
            dp[i%d][d] += ans[i];
            dp[i%d][d] %= 1000000007;
            ev.push({{i+x*d,ans[i]},{i%d,d}});
        }
        while (!ev.empty() and ev.top().first.first <= i) {
            auto cur = ev.top(); ev.pop();
            dp[cur.second.first][cur.second.second] -= cur.first.second;
            while (dp[cur.second.first][cur.second.second] < 0) {
                dp[cur.second.first][cur.second.second] += 1000000007;
            }
        }
        sum += ans[i]; sum %= 1000000007;
    }
    cout << sum;
}

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

Main.cpp:17:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   17 | main() {
      | ^~~~
#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...