Advertisement
Guest User

Untitled

a guest
Apr 19th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.99 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Linq;
  5.  
  6. namespace Adam_ukol {
  7.     class Program {
  8.         static void Main(string[] args) {
  9.             string input = Console.ReadLine();
  10.             int[] numbers = input.Split(new char[] { '+', '*', '-' }).Select(x => int.Parse(x)).ToArray<int>();
  11.             char[] ops = new char[numbers.Length - 1];
  12.             for(int i = 0; i < numbers.Length - 1; i++) {
  13.                 ops[i] = input[2 * i + 1];
  14.             }
  15.  
  16.             int[][] tableMax = new int[numbers.Length][];
  17.             int[][] tableMin = new int[numbers.Length][];
  18.  
  19.             for (int i = 0; i < numbers.Length; i++) {
  20.                 tableMax[i] = new int[numbers.Length];
  21.                 tableMax[i][i] = numbers[i];
  22.  
  23.                 tableMin[i] = new int[numbers.Length];
  24.                 tableMin[i][i] = numbers[i];
  25.             }
  26.  
  27.             for (int i = 1; i < numbers.Length; i++) {
  28.                 for (int j = i - 1; j >= 0; j--) {
  29.                     int max = int.MinValue;
  30.                     int min = int.MaxValue;
  31.  
  32.                     for (int k = 0; k < i - j; k++) {
  33.                         int p = evaluate(tableMax[j][j + k], tableMax[j + k + 1][i], ops[j + k]);
  34.                         int q = evaluate(tableMin[j][j + k], tableMin[j + k + 1][i], ops[j + k]);
  35.  
  36.                         max = (p > max) ? p : max;
  37.                         min = (q < min) ? q : min;
  38.                     }
  39.  
  40.                     tableMax[j][i] = max;
  41.                     tableMin[j][i] = min;
  42.                 }
  43.             }
  44.  
  45.             Console.WriteLine(tableMin[0][numbers.Length - 1] + " " + tableMax[0][numbers.Length - 1]);
  46.         }
  47.  
  48.         static int evaluate(int x, int y, char op) {
  49.             switch (op) {
  50.                 case '+': return x + y;
  51.                 case '-': return x - y;
  52.                 case '*': return x * y;
  53.                 default: throw new ArgumentException();
  54.             }
  55.         }
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement