CF1433B Yet Another Bookshelf 題解
阿新 • • 發佈:2021-12-16
CF1433B Yet Another Bookshelf 題解
Content
在一個僅有 \(0,1\) 這兩個數的數列上,每次可以選擇一段全為1的連續區間將其左移 \(1\) 或者右移 \(1\)。現給出 \(t\) 次詢問,每次詢問給出一個長度為 \(n\) 的滿足上述條件的數列,求出使所有為 \(1\) 的位置在唯一一個連續區間的最小操作次數。
資料範圍:\(1\leqslant t\leqslant 200,1\leqslant n\leqslant 50\)。
Solution
每次我們選擇全為 \(1\) 的區間向右移,其實就是為了把目標區間中的 \(0\) 給它補齊,所以,我們不難看出,這題目就是讓我們求每兩個 \(1\) 之間的 \(0\) 的數量的總和。直接掃一遍統計一下即可。
Code
int t, n, a[57]; int main() { //This program is written in Windows 10 by Eason_AC getint(t); while(t--) { int ans = 0, tmp = 0, flag = 0; getint(n); _for(i, 1, n) { getint(a[i]); if(a[i] == 0 && flag) { tmp++; if(i == n) tmp = 0; } else if(a[i] == 1) ans += tmp, tmp = 0, flag = 1; } writeint(ans), puts(""); } return 0; }