1. 程式人生 > 實用技巧 >D - Stamp(模擬)

D - Stamp(模擬)

D - Stamp

題目要求的是最少多少次能夠塗完不是藍色的方格,只需要將藍色方格的座標掃一遍

求出差值最小的就行了,當然連續的要跳過。

那麼答案就是將每個連續的整塊對這個最小差值做除法,如果能整除那麼就直接加上整除的值,

否則就再加1.

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;
int a[N];

int main(){
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i ++)
        cin 
>> a[i]; sort(a + 1, a + 1 + m); int minn = 0x3f3f3f3f; for(int i = 1; i <= m; i ++){ if(a[i] - a[i - 1] - 1 == 0) continue; minn = min(minn, a[i] - a[i - 1] - 1); } int ans = 0; for(int i = 1; i <= m; i ++){ if(a[i] - a[i - 1] - 1
== 0) continue; if((a[i] - a[i - 1] - 1) % minn == 0){ ans += (a[i] - a[i - 1] - 1) / minn; } else{ ans += (a[i] - a[i - 1] - 1) / minn; ans ++; } } if((n - a[m]) % minn == 0) ans
+= (n - a[m]) / minn; else{ ans += (n - a[m]) / minn; ans ++; } cout << ans << endl; return 0; }