Advertisement
Guest User

Untitled

a guest
Oct 26th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace Czekolada
  8. {
  9. class Program
  10. {
  11.  
  12. private static int[,] tab1;
  13.  
  14. private static long[,,,] wynikitabliczki;
  15. private static char[,] tab;
  16. private static bool check(int nStart, int nEnd, int mStart, int mEnd)
  17. {
  18. if (((nEnd - nStart) + (mEnd - mStart)) == 2)
  19. {
  20. return false;
  21. }
  22.  
  23. for (int i = mStart; i < mEnd; i++)
  24. {
  25. for (int j = nStart; j < nEnd; j++)
  26. {
  27. if ((tab1[i, j] != tab1[mStart, nStart]))
  28. {
  29. return true;
  30. }
  31.  
  32. }
  33.  
  34. }
  35.  
  36. return false;
  37. }
  38. public static long divide(int nStart, int nEnd, int mStart, int mEnd)
  39. {
  40. if ((wynikitabliczki[nStart, nEnd, mStart, mEnd] != 0))
  41. {
  42. return wynikitabliczki[nStart, nEnd, mStart, mEnd];
  43. }
  44.  
  45. long result = 0;
  46.  
  47. for (int i = 1; i < (nEnd - nStart); i++)
  48. {
  49. if ((Program.check(nStart, (nStart + i), mStart, mEnd) && Program.check((nStart + i), nEnd, mStart, mEnd)))
  50. {
  51. result = (result + ((Program.divide(nStart, (nStart + i), mStart, mEnd) * Program.divide((nStart + i), nEnd, mStart, mEnd)) % 1000000000));
  52. }
  53.  
  54. }
  55.  
  56. for (int i = 1; i < (mEnd - mStart); i++)
  57. {
  58. if ((Program.check(nStart, nEnd, mStart, (mStart + i)) && Program.check(nStart, nEnd, (mStart + i), mEnd)))
  59. {
  60. result = (result + ((Program.divide(nStart, nEnd, mStart, (mStart + i)) * Program.divide(nStart, nEnd, (mStart + i), mEnd)) % 1000000000));
  61. }
  62.  
  63. }
  64.  
  65. result = (result == 0 ? 1 : result) % 10000000000;
  66. wynikitabliczki[nStart, nEnd, mStart, mEnd] = result;
  67. return result;
  68. }
  69.  
  70. // static long Funkcja(int[,] tab1,int rozmiar_x,int rozmiar_y,int punkt_x, int punkt_y)
  71. //{ int i=0, x,y,n=rozmiar_x,m=rozmiar_y;
  72. // long kombinacje = 0;
  73. // bool dzieli = false;
  74. // for (x = i; i < n - 1; i++)
  75. // {
  76. // if ((tab1[m, i] - tab1[i, n]) >= 1)
  77. // {
  78. // kombinacje += Funkcja(tab1, x, rozmiar_y, punkt_x, punkt_y) * Funkcja(tab1, n - x, rozmiar_y, punkt_x + x, punkt_y);
  79. // dzieli = true;
  80. // }
  81. // }
  82. // for(y=i;i<m-1;i++)
  83. // {
  84. // if ((tab1[m, i] - tab1[i, n]) >= 1)
  85. // {
  86. // kombinacje += Funkcja(tab1, rozmiar_x, y, punkt_x, punkt_y) * Funkcja(tab1, m - y, rozmiar_y, punkt_x, punkt_y + y);
  87. // dzieli = true;
  88. // }
  89. // }
  90. // if (dzieli)
  91. // return kombinacje;
  92. // else
  93. // return 0;
  94. //}
  95.  
  96. static void Main(string[] args)
  97. {
  98. int n, m, i,j,x;
  99.  
  100. StreamReader reader = new StreamReader("plik.txt");
  101. string linia = reader.ReadLine();
  102. string[] oddzielone = linia.Split(null);
  103. n = int.Parse(oddzielone[0]);
  104. m = int.Parse(oddzielone[1]);
  105. wynikitabliczki = new long[n + 1,n + 1,m + 1,m + 1];
  106. tab = new char[m, n];
  107. tab1 = new int[m,n];
  108. x = 0;
  109. for (i = 0; i < m; i++)
  110. {
  111. if (reader.EndOfStream) break;
  112. else
  113. {
  114. string linijka = reader.ReadLine();
  115.  
  116. for (j = 0; j < linijka.Length; j++)
  117. {
  118. tab[x,j] = linijka[j];
  119.  
  120. }
  121. x++;
  122.  
  123. }
  124. }
  125. for (i = 0; i < m; i++)
  126. {
  127. for (j = 0; j < n; j++)
  128. {
  129. if (tab[i, j] == 'c')
  130. {
  131. tab1[i, j] = 0;
  132. }
  133. if (tab[i, j] == 'b')
  134. {
  135. tab1[i, j] = 1;
  136. }
  137. }
  138. }
  139.  
  140. //for (i = 0; i < m; i++)
  141. // for (j = 0; j < n -1 ; j++)
  142. // tab1[i,j + 1] = tab1[i,j + 1] + tab1[i,j];
  143.  
  144. //for (i = 0; i < m -1; i++)
  145. // for (j = 0; j < n; j++)
  146. // tab1[i + 1,j] = tab1[i + 1,j] + tab1[i,j];
  147.  
  148. for (i = 0; i < m; i++)
  149. {
  150. for (j = 0; j < n; j++)
  151. {
  152. Console.Write(tab1[i, j]);
  153. }
  154. Console.WriteLine();
  155. }
  156. long result = Program.divide(0, n, 0, m);
  157. Console.WriteLine(result);
  158.  
  159. Console.ReadKey();
  160. }
  161.  
  162. }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement