Submission #705214

#TimeUsernameProblemLanguageResultExecution timeMemory
705214rainboyHomework (CEOI22_homework)C11
53 / 100
86 ms58604 KiB
#include <stdio.h>
#include <string.h>

#define N	1000000
#define INF	0x3f3f3f3f

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int ej[N * 2][2], eo[N * 2]; char tt[N * 2];

void append(int i, int j) {
	ej[i][eo[i]++] = j;
}

int ll[N], rr[N], sz[N];

void dfs(int i) {
	int o;

	for (o = eo[i]; o--; ) {
		int j = ej[i][o];

		dfs(j);
		sz[i] += sz[j];
	}
	if (tt[i] == -1)
		ll[i] = rr[i] = 0, sz[i] = 1;
	else if (tt[i] == 0) {
		ll[i] = INF, rr[i] = 0;
		for (o = eo[i]; o--; ) {
			int j = ej[i][o];

			ll[i] = min(ll[i], ll[j]);
			rr[i] += rr[j];
		}
	} else {
		ll[i] = eo[i] - 1, rr[i] = 0;
		for (o = eo[i]; o--; ) {
			int j = ej[i][o];

			ll[i] += ll[j], rr[i] = max(rr[i], sz[i] - sz[j] + rr[j]);
		}
	}
}

int main() {
	static char cc[N * 7];
	static int qu[N * 2];
	int n, n_, cnt, i;

	scanf("%s", cc), n = strlen(cc);
	n_ = 0, cnt = 0;
	for (i = 0; i < n; i++)
		if (cc[i] == 'm') {
			if (cnt)
				append(qu[cnt - 1], n_);
			tt[qu[cnt++] = n_++] = cc[i + 1] == 'i' ? 0 : 1;
		} else if (cc[i] == '?') {
			append(qu[cnt - 1], n_);
			tt[n_++] = -1;
		} else if (cc[i] == ')')
			cnt--;
	dfs(0);
	printf("%d\n", rr[0] - ll[0] + 1);
	return 0;
}

Compilation message (stderr)

Main.c: In function 'main':
Main.c:52:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |  scanf("%s", cc), n = strlen(cc);
      |  ^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...