tetris.cpp

Bài toán

Độ phức tạp

Code này của Nguyễn Tiến Trung Kiên

#include <stdio.h>

#include <string.h>

int n, k;

int a[12309];

bool f(const char * s, int a[]){

    for (int i=1; s[i]; i++)

    if (a[i]-s[i] != a[i-1]-s[i-1]) return false;

    return true;

}

int f(const char * s){

    int l = strlen(s), r=0;

    for (int i=1; i+l-1<=n; i++)

    if (f(s, a+i)) r++;

//    printf("f(%s)=%d\n", s, r);

    return r;

}

main(){

    int answer=0;

    scanf("%d%d", &n, &k);

    for (int i=1; i<=n; i++)

    scanf("%d", &a[i]);

    if (k==1){ answer = f("0") + f("0000"); }

    if (k==2){ answer = f("00"); }

    if (k==3){ answer = f("001") + f("10"); }

    if (k==4){ answer = f("100") + f("01"); }

    if (k==5){ answer = f("000") + f("01") + f("10") + f("101"); }

    if (k==6){ answer = f("000") + f("20") + f("011") + f("00"); }

    if (k==7){ answer = f("000") + f("02") + f("110") + f("00"); }

    printf("%d\n", answer);

}

Nhận xét