生活随笔
收集整理的這篇文章主要介紹了
                                
Codeforces Global Round 13 C
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                            
                            
                            C. Pekora and Trampoline
 
題意:對(duì)于數(shù)組a,每次出發(fā)開始可以選擇任意元素作為起始點(diǎn),然后在數(shù)組上移動(dòng),落點(diǎn)為i + a[i],直至超出數(shù)組范圍,每次經(jīng)過的點(diǎn)的值減一(先移動(dòng)再減/直至減到1為止),求使數(shù)組元素全為1所用最少的出發(fā)次數(shù)
 
數(shù)據(jù)范圍:數(shù)組大小n:[1,5000][1,5000][1,5000] 元素大小 a[i]:[1,109][1,10^9][1,109]
 
思路:模擬+優(yōu)化
 首先觀察元素大小的最大值遠(yuǎn)高于數(shù)組大小上限,此時(shí)站在上面會(huì)直接超出數(shù)組范圍,直接模擬會(huì)多次重復(fù)該動(dòng)作消耗大量時(shí)間,因此可以對(duì)其超出數(shù)組范圍的部分批量一次性處理;
 再者是數(shù)組不斷趨向全為1的狀態(tài),中間態(tài)的數(shù)組難免出現(xiàn)大量的連續(xù)的1,直接模擬經(jīng)過連續(xù)1時(shí)只能一步步走則會(huì)消耗大量時(shí)間,因此可以另開一個(gè)數(shù)組去對(duì)應(yīng)記錄當(dāng)該值為1時(shí)最終會(huì)跳那個(gè)非1的值的位置
 
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#define fastio() ios_base::sync_with_stdio(0);cin.tie(0);
typedef long long ll
;
const int N 
= 5010;
int a
[N
], n
;
using namespace std
;void SetLeft(vector
<int>& b
, int j
) 
{b
[j
] = b
[j 
+ 1];for (int i 
= j 
- 1; i 
>= 1; i
--){if (a
[i
] == 1) b
[i
] = b
[i 
+ 1];else return;}
}int main()
{fastio();int t
;cin 
>> t
;while (t
--){cin 
>> n
;for (size_t i 
= 1; i 
<= n
; i
++)  cin 
>> a
[i
];ll ans 
= 0;vector
<int> b(n 
+ 2);b
[n 
+ 1] = n 
+ 1; for (int i 
= n
; i 
>= 1; i
--){if (a
[i
] != 1) b
[i
] = i
;else b
[i
] = b
[i 
+ 1];}while (1){int beg 
= b
[1]; if (beg 
> n
) break; if (a
[beg
] > max(n 
- beg
, 1)) {ans 
+= a
[beg
] - max(n 
- beg
, 1); a
[beg
] = max(n 
- beg
, 1);if (a
[beg
] == 1) SetLeft(b
, beg
);continue;}int j 
= beg
, k
;while (j 
<= n
){if (a
[j
] == 1) k 
= b
[j
]; else k 
= j 
+ a
[j
];if (a
[j
] == 2)  SetLeft(b
, j
); a
[j
] = max(a
[j
] - 1, 1);j 
= k
;		}ans
++;}cout 
<< ans 
<< "\n";}return 0;
}
                            總結(jié)
                            
                                以上是生活随笔為你收集整理的Codeforces Global Round 13 C的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。