视频网站设计模板,数字报网站模板,网站粘性,忻州市城乡建设管理局网站https://www.luogu.com.cn/problem/CF1033F
我们发现直接用二进制来做很难做#xff0c;但我们可以观察其给的表 我们发现如果表示成和的形式是容易进行一一对应的
对于询问的时候#xff0c;我们直接枚举每位有的和是多少#xff0c;虽然状态是三次的#xff0c;但是对于…https://www.luogu.com.cn/problem/CF1033F
我们发现直接用二进制来做很难做但我们可以观察其给的表 我们发现如果表示成和的形式是容易进行一一对应的
对于询问的时候我们直接枚举每位有的和是多少虽然状态是三次的但是对于每个填法最多对应两个
所以我们通过扩大状态不变枚举量来进行
#includebits/stdc.h
using namespace std;
#ifdef LOCAL#define debug(...) fprintf(stdout, ##__VA_ARGS__)
#else#define debug(...) void(0)
#endif
#define int long long
inline int read(){int x0,f1;char chgetchar(); while(ch0||
ch9){if(ch-)f-1;chgetchar();}while(ch0ch9){
x(x1)(x3)(ch^48);chgetchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
#define fi first
#define se second
//srand(time(0));
#define N 5010
#define M 600010
//#define mo
int n, m, i, j, k, T;
int a[N], c[N], cnt[M], q, c1, c2, s, t;
char str[N]; int zh(int *a) {int i, ans0; for(in; i1; --i) ansans*3a[i]; return ans;
}int dfs(int k, int s) {if(k0) return debug(Que : %lld\n, s), cnt[s]; if(str[k]A) return dfs(k-1, s*30)dfs(k-1, s*31); if(str[k]O) return dfs(k-1, s*30); if(str[k]X) return dfs(k-1, s*30)dfs(k-1, s*32); if(str[k]a) return dfs(k-1, s*32); if(str[k]o) return dfs(k-1, s*31)dfs(k-1, s*32); if(str[k]x) return dfs(k-1, s*31);
}signed main()
{#ifdef LOCALfreopen(in.txt, r, stdin);freopen(out.txt, w, stdout);#endif
// Tread();
// while(T--) {
//
// }nread(); mread(); qread(); for(i1; im; i) kread(), c[k]; for(s0; s(1n); s)for(t0; t(1n); t) {for(i1; in; i) {c1(si-1)1, c2(ti-1)1; a[i]c1c2; }if(c[s]*c[t]) cnt[zh(a)]c[s]*c[t], debug(%lld * %lld %lld\n, s, t, zh(a)); }while(q--) {scanf(%s, str1); reverse(str1, strn1); printf(%lld\n, dfs(n, 0)); }return 0;
}