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)
