제출 #407376

#제출 시각아이디문제언어결과실행 시간메모리
407376rainboySlon (COCI15_slon)C11
120 / 120
5 ms460 KiB
#include <ctype.h>
#include <stdio.h>
#include <string.h>

#define N	100000

int md;

int parse_expr(char *cc, int n, int *a_, int *b_);

int parse_factor(char *cc, int n, int *a_, int *b_) {
	int i;

	if (cc[0] == 'x') {
		*a_ = 1, *b_ = 0;
		return 1;
	} else if (isdigit(cc[0])) {
		i = 0, *a_ = *b_ = 0;
		while (i < n && isdigit(cc[i]))
			*b_ = (*b_ * 10 + (cc[i++] - '0')) % md;
		return i;
	} else {
		i = 1 + parse_expr(cc + 1, n - 1, a_, b_);
		return i + 1;
	}
}

int parse_term(char *cc, int n, int *a_, int *b_) {
	int i, j, a, b;

	*a_ = 0, *b_ = 1, i = 0;
	while (1) {
		j = i + parse_factor(cc + i, n - i, &a, &b);
		*a_ = ((long long) *a_ * b + (long long) *b_ * a) % md, *b_ = (long long) *b_ * b % md;
		if (j == n || cc[j] != '*')
			return j;
		i = j + 1;
	}
}

int parse_expr(char *cc, int n, int *a_, int *b_) {
	int i, j, a, b;

	*a_ = 0, *b_ = 0, i = 0;
	while (1) {
		j = i + parse_term(cc + i, n - i, &a, &b);
		if (i == 0 || cc[i - 1] == '+')
			*a_ = (*a_ + a) % md, *b_ = (*b_ + b) % md;
		else
			*a_ = (*a_ - a + md) % md, *b_ = (*b_ - b + md) % md;
		if (j == n || cc[j] != '+' && cc[j] != '-')
			return j;
		i = j + 1;
	}
}

int main() {
	static char cc[N + 1];
	int n, a, b, c, x;

	scanf("%s%d%d", cc, &c, &md), n = strlen(cc);
	parse_expr(cc, n, &a, &b);
	for (x = 0; x < md; x++)
		if (((long long) a * x + b) % md == c) {
			printf("%d\n", x);
			return 0;
		}
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

slon.c: In function 'parse_expr':
slon.c:51:30: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   51 |   if (j == n || cc[j] != '+' && cc[j] != '-')
      |                 ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
slon.c: In function 'main':
slon.c:61:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |  scanf("%s%d%d", cc, &c, &md), n = strlen(cc);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...