D - Stamp(模擬)
阿新 • • 發佈:2020-12-14
題目要求的是最少多少次能夠塗完不是藍色的方格,只需要將藍色方格的座標掃一遍
求出差值最小的就行了,當然連續的要跳過。
那麼答案就是將每個連續的整塊對這個最小差值做除法,如果能整除那麼就直接加上整除的值,
否則就再加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; }