Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Linq;
- namespace Adam_ukol {
- class Program {
- static void Main(string[] args) {
- string input = Console.ReadLine();
- int[] numbers = input.Split(new char[] { '+', '*', '-' }).Select(x => int.Parse(x)).ToArray<int>();
- char[] ops = new char[numbers.Length - 1];
- for(int i = 0; i < numbers.Length - 1; i++) {
- ops[i] = input[2 * i + 1];
- }
- int[][] tableMax = new int[numbers.Length][];
- int[][] tableMin = new int[numbers.Length][];
- for (int i = 0; i < numbers.Length; i++) {
- tableMax[i] = new int[numbers.Length];
- tableMax[i][i] = numbers[i];
- tableMin[i] = new int[numbers.Length];
- tableMin[i][i] = numbers[i];
- }
- for (int i = 1; i < numbers.Length; i++) {
- for (int j = i - 1; j >= 0; j--) {
- int max = int.MinValue;
- int min = int.MaxValue;
- for (int k = 0; k < i - j; k++) {
- int p = evaluate(tableMax[j][j + k], tableMax[j + k + 1][i], ops[j + k]);
- int q = evaluate(tableMin[j][j + k], tableMin[j + k + 1][i], ops[j + k]);
- max = (p > max) ? p : max;
- min = (q < min) ? q : min;
- }
- tableMax[j][i] = max;
- tableMin[j][i] = min;
- }
- }
- Console.WriteLine(tableMin[0][numbers.Length - 1] + " " + tableMax[0][numbers.Length - 1]);
- }
- static int evaluate(int x, int y, char op) {
- switch (op) {
- case '+': return x + y;
- case '-': return x - y;
- case '*': return x * y;
- default: throw new ArgumentException();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement