Informatika gyűjtemény

Egy szinttel feljebb mexico0.c

2004050607080910

NézetNyomtat

mexico0.c (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
#include <stdio.h>
#include <stdint.h>

uint8_t elek[1000][1000];
size_t n, e;
int8_t cache_bal[1000][1000], cache_jobb[1000][1000];

int beolvas(void)
{
    int a, b;
    size_t i, j;

    if (scanf("%d %d", &n, &e) != 2) {
        printf("hibas bemenet\n");
        return 0;
    }

    for (= 0; i < n; i++)
        for (= 0; j < n; j++)
            elek[i][j] = 0;

    for (= 0; i < e; i++) {
        if (scanf("%d %d", &a, &b) != 2) {
            printf("hibas bemenet\n");
            return 0;
        }

        elek[- 1][- 1] = 1;
        elek[- 1][- 1] = 1;
    }

    return 1;
}

int el(int u, int v)
{
    return elek[u][v];
}

int mod(int x)
{
    if (< 0)
        x += n;

    return x % n;
}

void nullaz(void)
{
    size_t i, j;

    for (= 0; i < n; i++)
        for (= 0; j < n; j++) {
            cache_bal[i][j] = -1;
            cache_jobb[i][j] = -1;
        }
}

int bal(int u, int v);
int jobb(int u, int v);

int bal(int u, int v)
{
    u = mod(u);
    v = mod(v);

    if (cache_bal[u][v] >= 0)
        return cache_bal[u][v];

    if (== v)
        cache_bal[u][v] = 1;
    else
        cache_bal[u][v] = (bal(u, v - 1) && el(- 1, v)) ||
                  (jobb(- 1, u) && el(u, v));

//  printf("bal: %d %d -> %d\n", u+1, v+1, cache_bal[u][v]);
    return cache_bal[u][v];
}

int jobb(int u, int v)
{
    u = mod(u);
    v = mod(v);

    if (cache_jobb[u][v] >= 0)
        return cache_jobb[u][v];

    if (== v)
        cache_jobb[u][v] = 1;
    else
        cache_jobb[u][v] = (jobb(u, v + 1) && el(+ 1, v)) ||
                   (bal(+ 1, u) && el(u, v));

//  printf("jobb: %d %d -> %d\n", u+1, v+1, cache_jobb[u][v]);
    return cache_jobb[u][v];
}

void megold(void)
{
    size_t i, j;

    nullaz();

    for (= 0; i < n; i++)
        for (= 0; j < n; j++) {
            if (bal(+ 1, j) && jobb(i, j)) {
                printf("IGEN\n");
                return;
            }
        }

#if 0
    for (= 0; i < n; i++) {
        for (= 0; j < n; j++)
            printf("%2d ", cache_bal[i][j]);

        printf("\n");
    }

    printf("\n");

    for (= 0; i < n; i++) {
        for (= 0; j < n; j++)
            printf("%2d ", cache_jobb[i][j]);

        printf("\n");
    }
#endif

    printf("NEM\n");
}

int main(void)
{
    if (!beolvas())
        return 1;

    megold();

    return 0;
}
(Vissza)