結果
| 問題 | No.3618 Omega Cat(Making ver.) |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-06 19:45:04 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,841 bytes |
| 記録 | |
| コンパイル時間 | 1,736 ms |
| コンパイル使用メモリ | 226,388 KB |
| 実行使用メモリ | 5,888 KB |
| 最終ジャッジ日時 | 2026-08-06 19:45:13 |
| 合計ジャッジ時間 | 8,847 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| サンプル | 0 % | AC * 1 |
| 小課題1 | 20 % | AC * 5 |
| 小課題2 | 20 % | AC * 12 |
| 小課題3 | 40 % | AC * 24 |
| 小課題4 | 20 % | AC * 25 WA * 13 |
| 合計 | 3.5 * 80% = 280 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
template<typename T>
vector<T> zaatu(vector<T> &A){
//座標圧縮=Compress.
vector<T> B = A;
sort(B.begin(),B.end());
B.erase(unique(B.begin(),B.end()),B.end());
for(auto &a : A) a = lower_bound(B.begin(),B.end(),a)-B.begin();
return B;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
int sn = 0;
while(T--){
int N; cin >> N;
sn += N;
if(sn > 7000 && N > 5) return 0;
vector<int> H(N);
for(auto &h : H) cin >> h;
zaatu(H);
vector<vector<int>> dp(4,vector<int>(N,1001001001));
for(int i=0; i<N; i++){
if(H.at(0) > H.at(1)){
if(i < H.at(1)) dp.at(0).at(i) = 1;
else if(i == H.at(1)) dp.at(0).at(i) = 0;
else if(i <= H.at(0)) dp.at(0).at(i) = 1;
else dp.at(0).at(i) = 2;
}
else{
if(i <= H.at(0)) dp.at(0).at(i) = 1;
else if(i == H.at(1)) dp.at(0).at(i) = 1;
else dp.at(0).at(i) = 2;
}
}
auto chmin = [&](auto &a,auto b) -> void {a=min(a,b);};
for(int p=2; p<N; p++){
int h = H.at(p);
vector<vector<int>> next(4,vector<int>(N,1001001001));
for(int t=0; t<4; t++){
if(t%2 == 0){
int low = 1001001001;
for(int i=N-1; i>=0; i--){
low = min(low,dp.at(t).at(i));
chmin(next.at(t).at(i),low+1);
}
low = 1001001001;
for(int i=0; i<N; i++){
low = min(low,dp.at(t).at(i));
chmin(next.at(t+1).at(i),low+1);
}
for(int i=h; i<N; i++) chmin(next.at(t).at(h),dp.at(t).at(i));
for(int i=0; i<=h; i++) chmin(next.at(t+1).at(h),dp.at(t).at(i));
}
else{
int low = 1001001001;
for(int i=0; i<N; i++){
low = min(low,dp.at(t).at(i));
chmin(next.at(t).at(i),low+1);
}
low = 1001001001;
if(t != 3) for(int i=N-1; i>=0; i--){
low = min(low,dp.at(t).at(i));
chmin(next.at(t+1).at(i),low+1);
}
if(t != 3) for(int i=h; i<N; i++) chmin(next.at(t+1).at(h),dp.at(t).at(i));
for(int i=0; i<=h; i++) chmin(next.at(t).at(h),dp.at(t).at(i));
}
}
swap(dp,next);
}
cout << *min_element(dp.at(3).begin(),dp.at(3).end()) << "\n";
}
}