Codeforces Round #378 (Div. 2), Problem: (C) Epidemic in Monstropolis Solution in C

Hi guys , i just tried the Epidemic in Monstropolis problem , hope you might like it .

#include
#include

#define MAXN 500
int a[MAXN];
int b[MAXN];
int partial_sums[MAXN];
unsigned char d[MAXN + 1][MAXN + 1];
unsigned char equals[MAXN + 1][MAXN + 1];
int ans[MAXN + 1][MAXN + 1];
int n, k;
int i, j, r, t;

int dif[2];
int order[2];
char symbol[2];

int main(int argc, char *argv[]) {

#ifndef ONLINE_JUDGE
freopen(“input.txt”, “r”, stdin);
//freopen(“output.txt”, “w”, stdout);
#endif
// read and init data
scanf(“%d”, &n);
for (i = 0; i < n; ++i) {
scanf(“%d”, &a[i]);
}

scanf(“%d”, &k);
for (i = 0; i < k; ++i) {
scanf(“%d”, &b[i]);
}

partial_sums[0] = a[0];
for (i = 1; i < n; ++i) {
partial_sums[i] = partial_sums[i – 1] + a[i];
}
d[0][0] = 1;

for (i = 0; i < n; ++i) {
equals[i][i] = 1;
}

for (i = 2; i <= n; ++i) {
for (j = 0; j <= n – i; ++j) {
equals[j][j + i – 1] = (equals[j][j + i – 2] && (a[j + i – 1] == a[j]));
}
}

// dynamic programming
for (i = 1; i <= n; ++i) {
int border = k;
if (i < k) {
border = i;
}

for (j = 1; j <= border; ++j) {
// int border2 = i – j + 1;
for (r = 1; r <= i; ++r) {
int sub_sum = partial_sums[i – 1] – partial_sums[i – r] + a[i – r];
unsigned char can_be_used = ((r == 1) || !equals[i – r][i – 1]);
unsigned char check = (can_be_used && (sub_sum == b[j – 1]));
if (d[i – r][j – 1] && check) {
d[i][j] = 1;
ans[i][j] = r;
break;
}
}
}
}

if (!d[n][k]) {
printf(“NO\n”);
} else {
printf(“YES\n”);
int curn = n;
int curk = k;

while (curn > 0) {
// print result
int maxval = -1;
int maxindx = curn;

for (i = curn – ans[curn][curk] + 1; i <= curn; ++i) {
if (a[i – 1] > maxval) {
maxval = a[i – 1];
maxindx = i;
}
}

int left_cnt = maxindx – curn + ans[curn][curk] – 1;
int right_cnt = curn – maxindx;

dif[0] = 0; dif[1] = -1;
order[0] = right_cnt; order[1] = left_cnt;
symbol[0] = ‘R’; symbol[1] = ‘L’;

if (left_cnt == 0) {
while (maxindx < curn && a[maxindx] == maxval) {
maxindx++;
left_cnt++;
right_cnt–;
}

dif[0] = 0; dif[1] = -1;
order[0] = right_cnt; order[1] = left_cnt;
symbol[0] = ‘R’; symbol[1] = ‘L’;

} else if (right_cnt == 0 || a[maxindx] == a[maxindx – 1]) {
dif[0] = -1; dif[1] = 0;
order[0] = left_cnt; order[1] = right_cnt;
symbol[0] = ‘L’; symbol[1] = ‘R’;
}

for (j = 0; j < 2; ++j) {
for (i = 0; i < order[j]; ++i) {
printf(“%d %c\n”, maxindx, symbol[j]);
maxindx += dif[j];
}
}

curn -= ans[curn][curk];
curk -= 1;

}
}

return 0;
}

Advertisement

spot_img

7 Reasons This Viral...

📢 As an Amazon Associate, I earn from qualifying...

Jay-Z to headline Super...

Music history is about to be made once again...

How Viral Kitchen Gadgets...

📢 As an Amazon Associate, I earn from qualifying...

How can you tell...

Tears are among humanity's most potent emotional signals, capable...

Is Viral Kitchen Gadgets...

📢 As an Amazon Associate, I earn from qualifying...

Power bank triggers fire...

A routine afternoon journey turned into a moment of...

7 Reasons This Viral Kitchen Gadgets Is Worth Every Single Penny

📢 As an Amazon Associate, I earn from qualifying purchases.After putting the Viral Kitchen Gadgets through a proper 30-day real-world test, I can tell...

Jay-Z to headline Super Bowl LXI Apple Music Half Time Show at SoFi Stadium

Music history is about to be made once again as global icon Shawn "Jay-Z" Carter has been officially announced as the headliner for the...

How Viral Kitchen Gadgets Is Quietly Changing the Game

📢 As an Amazon Associate, I earn from qualifying purchases.If you had told me six months ago that a single purchase would change how...

How can you tell fake crying?

Tears are among humanity's most potent emotional signals, capable of evoking immediate empathy and altering social dynamics. However, not all tears flow from genuine...

Is Viral Kitchen Gadgets Worth Your Money Here Is Our Full Review

📢 As an Amazon Associate, I earn from qualifying purchases.If you had told me six months ago that a single purchase would change how...

Power bank triggers fire in Mumbai local train, no injury reported

A routine afternoon journey turned into a moment of acute terror for commuters on Central Railway after a portable power bank abruptly caught fire...

The Real Truth About Viral Kitchen Gadgets Before You Buy

📢 As an Amazon Associate, I earn from qualifying purchases.Most products in this category disappoint within weeks. Cheap materials, vague instructions, and results that...

Can a man kill a bear with his hands?

Pop culture and action cinema often feed the dramatic fantasy of human triumph over apex predators, sparking a persistent debate: can a man kill...

7 Reasons This Viral Kitchen Gadgets Is Worth Every Single Penny

📢 As an Amazon Associate, I earn from qualifying purchases.Most products in this category disappoint within weeks. Cheap materials, vague instructions, and results that...