結果
問題 | No.2860 Heal Slimes |
ユーザー |
![]() |
提出日時 | 2024-08-25 15:14:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 111 ms / 2,000 ms |
コード長 | 1,529 bytes |
コンパイル時間 | 1,948 ms |
コンパイル使用メモリ | 196,908 KB |
最終ジャッジ日時 | 2025-02-24 01:24:34 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 60 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;void solve() {int N, K;ll X;cin >> N >> K >> X;vector<ll> H(N), d(N);for(int i = 0; i < N; i++) {cin >> H[i];}for(int i = 1; i < N; i++) {d[i] = H[i] - H[i - 1];}string ans = "Yes";for(int r = 0; r < K; r++) {if(r == 0 && r == N % K) {for(int m = 0; r + K * m < N; m++) {ll hm = (d[r + K * m] % X + X * 1000000000) % X;if(hm != 0) ans = "No";}}else if(r == 0) {for(int m = (N - r) / K; r + K * m >= 1; m--) {ll hm = (d[r + K * m] % X + X * 1000000000) % X;if(hm != 0) ans = "No";else if(d[r + K * m] < 0) ans = "No";else if(r + K * (m - 1) >= 1) d[r + K * (m - 1)] += d[r + K * m];}}else if(r == N % K) {for(int m = 0; r + K * m < N; m++) {ll hm = (d[r + K * m] % X + X * 1000000000) % X;if(hm != 0) ans = "No";else if(d[r + K * m] > 0) ans = "No";else if(r + K * (m + 1) < N) d[r + K * (m + 1)] += d[r + K * m];}}else {for(int m = 0; r + K * m < N; m++) {ll hm = (d[r + K * m] % X + X * 1000000000) % X;if(hm != 0) ans = "No";else if(d[r + K * m] > 0) ans = "No";else if(r + K * (m + 1) < N) d[r + K * (m + 1)] += d[r + K * m];}if(d[r + K * ((N - r) / K)] != 0) ans = "No";}// cout << r << " : " << ans << "\n";}cout << ans << "\n";}int main() {int T;cin >> T;while(T--) solve();}