Amount of milk from three cows mostly varies. Output the number of days on which the cows of highest amount of milk is changed.


My 1st INCORRECT Code

#include <iostream>
#include <algorithm>
using namespace std;

typedef struct Milklog {
	int date;
	char name[8];
	char op;
	int milk;
};

bool cmp(Milklog p1, Milklog p2) {
	if (p1.date < p2.date) {
		return true;
	}
	else {
		return false;
	}
}

int max(int x, int y, int z) {
	int m;
	m = (x > y) ? x : y;
	m = (z > m) ? z : m;
	return m;
}


int main() {
	int N;
	scanf("%d", &N);

	Milklog* log = new Milklog[N+1];
	log[0].date = 0;
	for (int i = 1; i <= N; i++) {
		cin >> log[i].date >> log[i].name >> log[i].op >> log[i].milk;
	}

	sort(log+1, log + N+1, cmp);


	int(* dp)[3] = new int[log[N].date+1][3];
	dp[log[0].date][0] = dp[log[0].date][1] = dp[log[0].date][2] = 7;
	for (int i = 1; i <= N; i++) {
		int now = log[i].date;
		int prev = log[i - 1].date;
		switch (log[i].name[0]) {
		case 'M':
			if (log[i].op == '+')
				dp[now][0] = dp[prev][0] + log[i].milk;
			else dp[now][0] = dp[prev][0] - log[i].milk;
			dp[now][1] = dp[prev][1]; dp[now][2] = dp[prev][2];
			break;
		case 'B':
			if (log[i].op == '+')
				dp[now][1] = dp[prev][1] + log[i].milk;
			else dp[now][1] = dp[prev][1] - log[i].milk;
			dp[now][0] = dp[prev][0]; dp[now][2] = dp[prev][2];
			break;
		case 'E':
			if (log[i].op == '+')
				dp[now][2] = dp[prev][2] + log[i].milk;
			else dp[now][2] = dp[prev][2] - log[i].milk;
			dp[now][1] = dp[prev][1]; dp[now][0] = dp[prev][0];
			break;
		}
	}


	int count = 0;
	int* display = new int[N + 1];
	display[0] = 0;
	for (int i = 1; i <= N; i++) {
		int now = log[i].date; int prev = log[i - 1].date;
		int m = max(dp[now][0], dp[now][1], dp[now][2]);
		if (m == dp[now][2]) {
			if (m == dp[now][1]) {
				if (m == dp[now][0]) display[i] = 7;
				else display[i] = 3;
			}
			else display[i] = 1;
		}
		else if (m == dp[now][1]) {
			if (m == dp[now][0]) display[i] = 6;
			else display[i]  = 2;
		}
		else if (m == dp[now][0]) {
			if (m == dp[now][2]) display[i] = 5;
			else display[i] = 4;
		}

		if (display[i] != display[i - 1]) count++;
	}

	printf("%d", count);

}


comments

2020-01-17 You don’t need to save all the intput data. Make situation abstract, and find what’s needed for problem solving. +USE C++ STL!! ( learn it first)