#!/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;
}