VPARTSUM - Tổng bộ phận

Tác giả: happyboy99x

Ngôn ngữ: C++

#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;

void print(set<int> s) {
	for(set<int>::iterator it = s.begin(); it != s.end(); ++it)
		printf("%d ", *it);
	printf("\n");
}

int main() {
	set<int> s;
	int n, p, k, sum = 0;
	scanf("%d%d%d", &n, &k, &p);
	int res = p;
	for(int i = 0; i < n; ++i) {
		int x; scanf("%d", &x);
		sum = (sum + x) % p;
		set<int>::iterator it = s.upper_bound(((sum - k) % p + p) % p);
		if(it != s.begin())
			res = min(res, ((sum - *(--it)) % p + p) % p);
		s.insert(sum);
	}
	printf("%d\n", res);
	return 0;
}

Download