A. A Prank
生活随笔
收集整理的這篇文章主要介紹了
A. A Prank
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題鏈接:A. A Prank
題意:給定一個(gè)長(zhǎng)度為n的遞增序列數(shù)組,你可以進(jìn)行刪除任意連續(xù)序列的操作,要求刪除之后還可以還原該數(shù)組,輸出最大刪除數(shù)。
? ? ? ? ?? 例如:n = 6
? ? ? ? ? ? ? ? ? ?? 數(shù)組 = {1,3,4,5,6,9}
? ? ? ? ? ? ? ? ? ?? 可以刪除數(shù)字4,5,此時(shí)可以還原
數(shù)據(jù)范圍:? n <= 100 ? ? ? ? ? ? ? ? ?? 1 <= a[i] <= 1000
自我理解:此題很坑,細(xì)節(jié)也很多,如果只用純模擬的話,必須考慮很多種情況。有結(jié)果為0的情況,結(jié)果為連續(xù)數(shù)組個(gè)數(shù) - 2,
? ? ? ? 結(jié)果為連續(xù)數(shù)組個(gè)數(shù) - 1的情況
?
題解:如果三個(gè)三個(gè)為一組判斷是否連續(xù),就可避免很多種判斷。
? ? ? ? ? 數(shù)組從1位置開始到位置。a[0] = 0, ?? a[n+1] = 1000, ? 循環(huán)從0到n+1。
?
純模擬
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string>using namespace std;int a[110];int n;int main() {scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);int l = 0, r;int t = 0;int res = 0;int ans = 0;for(int i = 1; i <= n; i++){if(a[i] - a[i-1] == 1){ans++;} else{res = ans + 1;int temp;r = i - 1;l = r - res + 1;if(res <= 1||(res == 2&&a[n-1] < 1000&&a[0] > 1)) temp = 0;else if((l == 0&&r == n-1&&a[r] == n)||(l == 0&&r == n-1&&a[r] == 1000)||(l == 0&&r < n-1&&l != r&&a[r] == res)||(l > 0&&r == n-1&&a[r] == 1000)) temp = res - 1;else temp = res - 2;t = max(t, temp);ans = 0;}}printf("%d\n", t);return 0; }?
思維,技巧(三個(gè)三個(gè)判斷模擬)
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string>using namespace std;int a[110];int n;int main() {scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);a[n+1] = 1001;int c = 0;int ans = 0;for(int i = 1; i <= n+1; i++){if(a[i+1] - a[i-1] == 2){c++;//printf("******* %d\n", c);} else{ans = max(ans, c);c = 0;} }printf("%d\n", ans);return 0; }?
總結(jié)
以上是生活随笔為你收集整理的A. A Prank的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载文章,感觉真的很心酸
- 下一篇: 检查是否有负循环(Bellman For