jzoj4307. 【NOIP2015模擬11.3晚】喝喝喝(列舉)
阿新 • • 發佈:2018-12-13
4307. 【NOIP2015模擬11.3晚】喝喝喝
Description
Input
Output
Sample Input 3 2 5 3 1
Sample Output 4
Data Constraint
分析:列舉每個區間終點,通過列舉倍數判定區間起點。
程式碼
#include <cstdio> #define N 100005 #define ll long long using namespace std; int n,k,a[N]; int f[N]; ll ans; int main() { freopen("drink.in","r",stdin); freopen("drink.out","w",stdout); scanf("%d%d", &n, &k); int mx = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); if (a[i] > mx) mx = a[i]; } int l = 1, r = 2; f[a[l]]++; while (r <= n) { int i = 0; int s = a[r] * i + k; if (a[r] > k) while(s <= mx) { while (f[s]) f[a[l++]]--; i++; s = a[r] * i + k; } ans += r - l; f[a[r++]]++; } printf("%lld", ans + n); fclose(stdin); fclose(stdout); }