Pagini recente » Cod sursa (job #226939) | Cod sursa (job #2621883) | Cod sursa (job #351582) | Cod sursa (job #117765) | Cod sursa (job #2250625)
#include <bits/stdc++.h>
using namespace std;
const int sz1 = 1 << 12;
int v[205];
const long long mod = (long long)(1e9 + 7);
int vn[205], sz;
bool fr[12];
bool viz[12];
long long d[sz1][205];
int n, k;
inline long long ver(int f1, int f2, int a, int b, int conf, bool iss) {
memset(fr, 0, sizeof fr);
memset(viz, 0, sizeof viz);
bool st = 0;
bool stc = 0;
sz = 0;
if(iss) {
for(int i = 0;i < k;i++)
if(conf & (1 << i))
viz[i + 1] = 1, fr[i + 1] = 1;
}
st = stc = 1 - fr[v[a]];
if(a > b && f1 > f2)
return 1;
for(int k = f1;k <= f2;k++)
vn[++sz] = v[k];
for(int k = a;k <= b;k++)
vn[++sz] = v[k];
for(int i = 1;i <= sz;i++) {
if(vn[i] != vn[i - 1])
st = 1 - st;
if(viz[vn[i]] == 1 && fr[vn[i]] != st)
return 0;
viz[vn[i]] = 1;
fr[vn[i]] = st;
}
if(st == stc)
return 0;
return 1;
}
int main() {
freopen("wwt.in", "r", stdin);
freopen("wwt.out", "w", stdout);
cin >> n >> k;
for(int i = 1;i <= n;i++) {
cin >> v[i];
}
long long ans = 0LL;
int dim = 1 << k;
dim--;
for(int i = 0;i < dim;i++)
d[i][1] = 1;
for(int i = 2;i <= n;i++) {
bool st = 1;
if(ver(1, 0, 1, i - 1, 0, 0) == 1) {
int conf1, conf2;
conf1 = 0, conf2 = 0;
for(int j = 1;j < i;j++) {
if(v[j] != v[j - 1])
st = st - 1;
if(st)
conf1 |= 1 << (v[j] - 1);
else
conf2 |= 1 << (v[j] - 1);
}
d[conf1][i]++;
d[conf2][i]++;
}
for(int j = i - 1;j >= 1;j--) {
for(int a = 0;a < dim;a++)
if(ver(1, 0, i - 1, j + 1, a, 1)) {
d[a][i] += d[a][j];
}
}
}
// for(int i = 1;i <= n;i++)
// cerr << d[i] << " ";
for(int i = 1;i <= n;i++) {
int conf11 = 0;
bool aa = 1;
int prev = -1;
for(int j = i + 1;j <= n;j++) {
if(v[j] != prev)
aa = 1 - aa;
prev = v[j];
if(aa)
conf11 |= 1 << (v[j] - 1);
}
int conf22 = 0;
conf22 = (1 << k) - conf11 - 1;
cerr << conf11 << " " << conf22 << "\n";
for(int conf = 0;conf < dim;conf++) {
ans = (ans + 1LL * (ver(1, 0, i + 1, n, conf11, 1) | ver(1, 0, i + 1, n, conf22, 1)) * d[conf][i]);
ans %= mod;
}
}
cout << ans;
return 0;
}