#!/usr/bin/perl -wl $n = "01"; for $p (1..5) { for (1..5) { open(F, ">duze$n.in"); select(F); print "5000 $p 999983"; for (1..$p) { $x = sprintf("%d%d%d\n%d%d%d\n%d%d%d", int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2), int(rand()*2)); $x =~ s/0/./g; $x =~ s/1/x/g; print $x; } $n++; } }
http://www.ii.uni.wroc.pl/~mbi/dyd/aisd_10s/wyniki_B.html 0 oznacza brak poprawnej odpowiedzi na jakiś test
0: Ale Gali 0: And Kaje 0: Ani Stoz 0: Are Flin 0: Bla Blab (test) 0: Dan Blas 0: Grz Kurd 0: Kam Miel 0: Kon Wypy 0: Luk Syno 0: Luk Toma 0: Mal Jurk 0: Mar Kowa 0: Mic Glen 0: Mik Ziem 0: Pat Obar 0: Paw Kali 0: Ped ober (test) 0: Pio Pole 0: Pio Posa 0: Pio Walk 0: Pio Walk (test) 0: Szy Lasz 0: Wal Augu (test) 1176: Dam Rusa 1236: Jak Tarn 1520: Paw Muri 1912: Wik Jana 2196: Krz Nowi 2496: Mar Kola 2688: Kar Kona 4484: Mac Pacu 4620: Mic Mazu 5340: EK G (test) 5424: Mat Naha (test) 5456: Mat Naha 5532: Pio Gajo 5836: Mik Kali 6036: Wal Augu (test) 6224: Krz Parj 6224: Mic Karp 6308: Mar Ryba 7148: Joa Bieg 7520: Mac Maty 8684: Paw Gawr (test) 8888: Kac Krol 9644: Mag Sara 9800: Tom Losz 9984: Raf Luka 10120: Pio Bzow 10244: Pio Ryba 10252: Mar Janc 11040: Pio Rzep 12380: Paw Kacp 12628: Bar Krok 12820: Mac Jabl (test) 12908: Mar Ocze 12912: Daw Ryzn 13456: Krz Ziel (test) 13476: Mar Wlod 13784: Mar Kacz 13972: Luk Zapa 13996: Bla Sala 14212: Nha Nguy 14436: Ale Bali 14492: Dam Stra 14516: Mic Roza 14792: Krz Ziel 15084: Mar Janu 15100: Pio Krze 15312: Dom Rogo 16516: Paw Kici 16912: Iza Bicz 18472: Dom Rusa
Rozwiazanie nie jest optymalne.
#include <stdio.h> #include <string.h> #define SIZE 1024 #define NEXT(i, j) ((i << 5 | j) & 0x3FF) unsigned int tab[SIZE]; unsigned int tab2[SIZE]; unsigned char trans[SIZE][32]; unsigned int squares[5]; unsigned int input[] = { 0x1000, 0x0080, 0x0004, 0x0800, 0x0040, 0x0002, 0x0400, 0x0020, 0x0001, }; unsigned int mask[] = { 0x1ce7, 0x39ce, 0x739c }; int main() { int n, p, mod; int i, j, k, t, modparam; unsigned int tmp; scanf("%d %d %d", &n, &p, &mod); for(tmp = mod - 1, modparam = 0; !(tmp & (unsigned int) 31 << (sizeof(unsigned int)*8 - 5)); tmp <<= 5, modparam++); t = p; while (t--) { for (i = 0; i < 9; i++) { if (!(i % 3)) getchar_unlocked(); squares[t] |= getchar_unlocked() == '.' ? 0 : input[i]; } } for (i = 0; i < SIZE; i++) { tmp = i << 5; for (j = 0; j < 32; j++, tmp++) { for (t = 0; t < p; t++) { for (k = 0; k < 3; k++) { if (!((tmp & mask[k]) ^ (squares[t] << k))) { goto OUT; } } } trans[i][j] = 1; tab[NEXT(i,j)]++; OUT: {} } } n -= 3; while (n--) { memset(tab2, 0, sizeof tab); for (i = 0; i < SIZE; i++) { tmp = NEXT(i,0); for (j = 0; j < 32; j++) { tab2[tmp++] += trans[i][j] * tab[i]; } } memcpy(tab, tab2, sizeof tab); if (!(n % modparam)) for (i = 0; i < SIZE; tab[i++] %= mod); } for (n = 0, i = 0; i < SIZE; n = (n + tab[i++]) % mod); printf("%d\n", n); return 0; }