Submission #407376

#TimeUsernameProblemLanguageResultExecution timeMemory
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; }

Compilation message (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...