50pts求助
查看原帖
50pts求助
1345783
BK小鹿楼主2024/11/3 22:43

rt,我看题解第一个没有T,可是我又T又WA,救救孩子被!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const int N = 1e5 + 5;

int ex_p;
int cost, basi;
int pri[N], sv[N], cnt, a[N];
int low;

int main() {
	scanf("%d%d%d", &ex_p, &cost, &basi);
	int maxx = -1, sv1;
	while (1) {
		int a1, b;
		scanf("%d%d", &a1, &b);
		if (a1 == -1 && b == -1) break;
		pri[++ cnt] = a1, sv[cnt] = b;
		a[pri[cnt]] = b;
		if (pri[cnt] > maxx) {
			maxx = pri[cnt];
			sv1 = sv[cnt];
		}
	}
	scanf("%d", &low);
	
	for (int i = maxx + 1; ; i ++ ) {
		int x = sv1 - (i - maxx) * low;
		if (x <= 0) break;
		pri[++ cnt] = i, sv[cnt] = x;a[pri[cnt]] = x;
	}
	
	int price, ans;
	for (int i = 1; i <= 100000; i ++ ) {
		int nmax = -114514;
		bool f = 1;
		for (int k = i; k <= 100000; k ++ ) {
			int pro = (k - cost + i) * a[k], pro1 = (k - cost - i) * a[k];
			if (pro > nmax) {
				nmax = pro;price = k;
			}
			if (pro1 > nmax) {
				nmax = pro1;f = 0;price = k;
			}
		}
		if (price == ex_p) {
			if (f == 0) i *= -1;
			cout << i;
			return 0;
		}
	}
	cout << "NO SOLUTION";
	return 0;
}
2024/11/3 22:43
加载中...