fork(2) download
  1. #include <iostream>
  2. #include <string>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. char plec(int pesel)
  8. {
  9.  
  10. if (pesel % 2 == 0)
  11. return '2';
  12. else
  13. return '1';
  14.  
  15. }
  16.  
  17. char przestepny(int rok, int miesiac)
  18. {
  19. int wiek=0;
  20.  
  21. if (miesiac > 0 && miesiac < 13)
  22. {
  23. wiek = 19;
  24. rok+=(wiek*100);
  25.  
  26. }
  27. else if (miesiac > 20 && miesiac < 33)
  28. {
  29. wiek = 20;
  30. rok+=(wiek*100);
  31.  
  32. }
  33. else if (miesiac > 40 && miesiac < 53)
  34. {
  35. wiek = 21;
  36. rok+=(wiek*100);
  37.  
  38. }
  39.  
  40. else if (miesiac > 60 && miesiac < 73)
  41. {
  42. wiek = 22;
  43. rok+=(wiek*100);
  44.  
  45. }
  46.  
  47. else if (miesiac > 80 && miesiac < 93)
  48. {
  49. wiek = 18;
  50. rok+=(wiek*100);
  51.  
  52. }
  53.  
  54. if(rok % 4 == 0){
  55. if(rok % 100 == 0){
  56. if(rok % 400 == 0) return '1';
  57. else return '2';
  58.  
  59. }
  60. else return '1';
  61. }
  62. else return '2';
  63.  
  64. }
  65.  
  66. char dzien_tygodnia(int rok, int miesiac, int dzien)
  67. {
  68.  
  69. int wiek = 0;
  70.  
  71. if (miesiac > 0 && miesiac < 13)
  72. {
  73. wiek = 19;
  74. miesiac -= 2;
  75. }
  76. else if (miesiac > 20 && miesiac < 33)
  77. {
  78. wiek = 20;
  79. miesiac -= 22;
  80. }
  81. else if (miesiac > 40 && miesiac < 53)
  82. {
  83. wiek = 21;
  84. miesiac -= 42;
  85. }
  86.  
  87. else if (miesiac > 60 && miesiac < 73)
  88. {
  89. wiek = 22;
  90. miesiac -= 62;
  91. }
  92.  
  93. else if (miesiac > 80 && miesiac < 93)
  94. {
  95. wiek = 18;
  96. miesiac -= 62;
  97. }
  98.  
  99. if (miesiac < 1)
  100. {
  101. miesiac += 12;
  102. rok -= 1;
  103. }
  104.  
  105. int weekday=0;
  106.  
  107. weekday = (floor((26 * miesiac - 2) / 10) + dzien + rok + floor(rok / 4) + floor(wiek / 4) + 5 * wiek);
  108.  
  109. weekday %= 7;
  110.  
  111. if (weekday == 0)
  112. return '7';
  113. else if (weekday == 1)
  114. return '1';
  115. else if (weekday == 2)
  116. return '2';
  117. else if (weekday == 3)
  118. return '3';
  119. else if (weekday == 4)
  120. return '4';
  121. else if (weekday == 5)
  122. return '5';
  123. else return '6';
  124.  
  125.  
  126. }
  127.  
  128. int main()
  129. {
  130.  
  131. string kod;
  132. int testy;
  133.  
  134. cin >> kod >> testy;
  135.  
  136. int ile = 0;
  137. int wynik = 0;
  138.  
  139. string test_pesel = {'1', '3', '7', '9', '1', '3', '7', '9', '1', '3', '1'};
  140.  
  141. for (int i = 0; i < 3; i++)
  142. {
  143. if (kod[i] != '0')
  144. ile++;
  145. }
  146.  
  147. for (int k = 0; k < testy; k++)
  148. {
  149.  
  150. string pesel;
  151. cin >> pesel;
  152.  
  153. int ilosc = 0;
  154. bool szukaj=0;
  155. int nr = 0;
  156.  
  157. for (int i = 0; i < 11; i++)
  158. {
  159.  
  160. if (pesel[i] == '?')
  161. {
  162. szukaj = true;
  163. nr = i;
  164. }
  165. }
  166.  
  167. int szukana = 1;
  168. int suma = 0;
  169.  
  170. if (szukaj == true)
  171. {
  172. for (int i = 0; i < 11; i++)
  173. {
  174. if (i != nr)
  175. {
  176. suma += ((pesel[i] - 48) * (test_pesel[i] - 48));
  177. }
  178.  
  179. }
  180.  
  181. int suma_dwa = suma;
  182.  
  183. while (suma_dwa % 10 != 0)
  184. {
  185. suma_dwa = suma;
  186. suma_dwa += (test_pesel[nr] - 48) * szukana;
  187. szukana++;
  188. }
  189.  
  190. szukana -= 1;
  191. string zmiana=to_string(szukana);
  192.  
  193. pesel.replace(nr, 1, zmiana);
  194.  
  195. }
  196.  
  197. int suma_test=0;
  198. for(int i=0; i<11; i++){
  199. suma_test+=((pesel[i] - 48) * (test_pesel[i] - 48));
  200. }
  201.  
  202. if(suma_test % 10 == 0){
  203.  
  204. if (kod[0] != '0')
  205. {
  206. char wartosc_1 = plec(pesel[9] - 48);
  207. if (wartosc_1 == kod[0])
  208. {
  209. ilosc++;
  210. }
  211.  
  212. }
  213.  
  214. if (kod[2] != '0')
  215. {
  216. char wartosc_2 = przestepny(stoi(pesel.substr(0, 2)), stoi(pesel.substr(2, 2)));
  217. if (wartosc_2 == kod[2])
  218. {
  219. ilosc++;
  220. }
  221. }
  222.  
  223. if (kod[1] != '0')
  224. {
  225. char wartosc_3 = dzien_tygodnia(stoi(pesel.substr(0, 2)), stoi(pesel.substr(2, 2)), stoi(pesel.substr(4, 2)));
  226. if (wartosc_3 == kod[1])
  227. {
  228. ilosc++;
  229. }
  230. }
  231.  
  232. if (ilosc == ile)
  233. {
  234. wynik++;
  235. }
  236.  
  237. }
  238.  
  239. }
  240.  
  241. cout << wynik;
  242.  
  243. return 0;
  244. }
Success #stdin #stdout 0.01s 5396KB
stdin
050 8
03093069448
87452611859
84672745?27
6?300984627
014?0210104
71091632346
940526?9857
74822018228
stdout
3