一个助的求
查看原帖
一个助的求
1238483
cqbzzlr楼主2024/8/30 19:12

80pts求调

#include <stack>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define IOS ios::sync_with_stdio(0);
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define per(i,x,y) for(int i=x;i>=y;i--)
#define SORT(x,y) sort(x+1,x+y+1)
#define UNQIUE(x,y) unqiue(x+1,x+y+1)
#define UPB(x,y,z) upper_bound(x+1,x+y+1,z)-x
#define LWB(x,y,z) lower_bound(x+1,x+y+1,z)-x
#define IT iterator

typedef long long ll;

const int N = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const int ecnts = 1e-6;

inline int max(int x, int y) {
	if (x > y) return x;
	else return y;
}
inline int min(int x, int y) {
	if (x < y) return x;
	else return y;
}
inline void swap(int &x, int &y) {
	int t = x;
	x = y;
	y = t;
}
inline int pow(int x, int y) {
	int ans = 1;
	while (y) {
		if (y % 2) ans *= x;
		x *= x;
		y = y >> 1;
	}
	return ans;
}
int a[N];
inline void solve() {
	int n, m, k, y = 0;
	cin >> n >> m >> k;
	rep(i, 1, n) {
		int x;
		cin >> x;
		a[x]++;
		y = max(x, y);
	}
	int l = 0, r = m - 1, sum = 0;
	rep(i, l, r) {
		sum += a[i];
	}
	int ans = 0;
	while (r <= y) {
		if (a[l]) sum -= a[l];
		l++;
		r++;
		if (a[r]) sum += a[r];
		if (sum >= k) {
			a[r] -= (sum - (k - 1));
			ans += (sum - (k - 1));
			sum = k - 1;
			
		}
		
	}
	cout << ans;
}

signed main() {
	IOS;
	int T = 1;
	//cin >> T;
	rep(fain, 1, T) {
		solve();
	}
}
2024/8/30 19:12
加载中...