Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- namespace Czekolada
- {
- class Program
- {
- private static int[,] tab1;
- private static long[,,,] wynikitabliczki;
- private static char[,] tab;
- private static bool check(int nStart, int nEnd, int mStart, int mEnd)
- {
- if (((nEnd - nStart) + (mEnd - mStart)) == 2)
- {
- return false;
- }
- for (int i = mStart; i < mEnd; i++)
- {
- for (int j = nStart; j < nEnd; j++)
- {
- if ((tab1[i, j] != tab1[mStart, nStart]))
- {
- return true;
- }
- }
- }
- return false;
- }
- public static long divide(int nStart, int nEnd, int mStart, int mEnd)
- {
- if ((wynikitabliczki[nStart, nEnd, mStart, mEnd] != 0))
- {
- return wynikitabliczki[nStart, nEnd, mStart, mEnd];
- }
- long result = 0;
- for (int i = 1; i < (nEnd - nStart); i++)
- {
- if ((Program.check(nStart, (nStart + i), mStart, mEnd) && Program.check((nStart + i), nEnd, mStart, mEnd)))
- {
- result = (result + ((Program.divide(nStart, (nStart + i), mStart, mEnd) * Program.divide((nStart + i), nEnd, mStart, mEnd)) % 1000000000));
- }
- }
- for (int i = 1; i < (mEnd - mStart); i++)
- {
- if ((Program.check(nStart, nEnd, mStart, (mStart + i)) && Program.check(nStart, nEnd, (mStart + i), mEnd)))
- {
- result = (result + ((Program.divide(nStart, nEnd, mStart, (mStart + i)) * Program.divide(nStart, nEnd, (mStart + i), mEnd)) % 1000000000));
- }
- }
- result = (result == 0 ? 1 : result) % 10000000000;
- wynikitabliczki[nStart, nEnd, mStart, mEnd] = result;
- return result;
- }
- // static long Funkcja(int[,] tab1,int rozmiar_x,int rozmiar_y,int punkt_x, int punkt_y)
- //{ int i=0, x,y,n=rozmiar_x,m=rozmiar_y;
- // long kombinacje = 0;
- // bool dzieli = false;
- // for (x = i; i < n - 1; i++)
- // {
- // if ((tab1[m, i] - tab1[i, n]) >= 1)
- // {
- // kombinacje += Funkcja(tab1, x, rozmiar_y, punkt_x, punkt_y) * Funkcja(tab1, n - x, rozmiar_y, punkt_x + x, punkt_y);
- // dzieli = true;
- // }
- // }
- // for(y=i;i<m-1;i++)
- // {
- // if ((tab1[m, i] - tab1[i, n]) >= 1)
- // {
- // kombinacje += Funkcja(tab1, rozmiar_x, y, punkt_x, punkt_y) * Funkcja(tab1, m - y, rozmiar_y, punkt_x, punkt_y + y);
- // dzieli = true;
- // }
- // }
- // if (dzieli)
- // return kombinacje;
- // else
- // return 0;
- //}
- static void Main(string[] args)
- {
- int n, m, i,j,x;
- StreamReader reader = new StreamReader("plik.txt");
- string linia = reader.ReadLine();
- string[] oddzielone = linia.Split(null);
- n = int.Parse(oddzielone[0]);
- m = int.Parse(oddzielone[1]);
- wynikitabliczki = new long[n + 1,n + 1,m + 1,m + 1];
- tab = new char[m, n];
- tab1 = new int[m,n];
- x = 0;
- for (i = 0; i < m; i++)
- {
- if (reader.EndOfStream) break;
- else
- {
- string linijka = reader.ReadLine();
- for (j = 0; j < linijka.Length; j++)
- {
- tab[x,j] = linijka[j];
- }
- x++;
- }
- }
- for (i = 0; i < m; i++)
- {
- for (j = 0; j < n; j++)
- {
- if (tab[i, j] == 'c')
- {
- tab1[i, j] = 0;
- }
- if (tab[i, j] == 'b')
- {
- tab1[i, j] = 1;
- }
- }
- }
- //for (i = 0; i < m; i++)
- // for (j = 0; j < n -1 ; j++)
- // tab1[i,j + 1] = tab1[i,j + 1] + tab1[i,j];
- //for (i = 0; i < m -1; i++)
- // for (j = 0; j < n; j++)
- // tab1[i + 1,j] = tab1[i + 1,j] + tab1[i,j];
- for (i = 0; i < m; i++)
- {
- for (j = 0; j < n; j++)
- {
- Console.Write(tab1[i, j]);
- }
- Console.WriteLine();
- }
- long result = Program.divide(0, n, 0, m);
- Console.WriteLine(result);
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement