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