답안 #824658

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
824658 2023-08-14T08:35:52 Z 이동현(#10361) 로봇 골프 (ROI19_golf) C++17
0 / 100
5000 ms 524288 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define int long long
using namespace std;

const int mod = 998244353;

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

	int n, m, k;
	cin >> n >> m >> k;
    swap(n, m);
	vector<array<int, 3>> a(k);
	for(int i = 0; i < k; ++i){
		cin >> a[i][0] >> a[i][1] >> a[i][2];
		--a[i][0], --a[i][1];
        swap(a[i][0], a[i][1]);
	}

	sort(a.begin(), a.end(), [&](array<int, 3>&x, array<int, 3>&y){return x[0] + x[1] < y[0] + y[1];});

	int ans = 0;
	auto sol = [&](int bt){
		vector<int> dp(m + 4), ndp(m + 4);

		int ap = k - 1, cnt = 0;
		for(int i = n + m - 2; i >= 0; --i){
			for(int j = 0; j < (int)dp.size() - 1; ++j){
				if(!bt) ndp[j] = min(dp[j], dp[j + 1]);
				else ndp[j] = max(dp[j], dp[j + 1]);
			}
			swap(dp, ndp);

            ++cnt;
			while(ap >= 0 && a[ap][0] + a[ap][1] == i){
				dp[a[ap][1]] = a[ap][2];
				--ap;
                cnt = 0;
			}

            if(cnt > 5 && i < n){
                int nxt = i % 2;
                if(ap >= 0) nxt = a[ap][0] + a[ap][1] + (a[ap][0] + a[ap][1] + i) % 2;

                if(nxt < i){
                    int add = 0;
                    for(int x = 0; x <= i; ++x){
                        int y = i - x;
                        if(x < n && y < m){
                            (add += dp[y] + mod * 2) %= mod;
                        }
                    }

                    ans += add * (i - nxt) / 2;
                    i = nxt;
                    cnt = 0;
                }
            }

			if(!bt){
				for(int x = 0; x <= i; ++x){
					int y = i - x;
					if(x < n && y < m){
						(ans += dp[y] + mod * 2) %= mod;
					}
				}
			}

			bt ^= 1;
		}
	};
	sol(0);
	sol(1);

	cout << ans << '\n';
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1768 ms 2644 KB Output is correct
2 Execution timed out 5052 ms 4320 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5094 ms 4204 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5094 ms 4204 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 181 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -