BZOJ1273 [BeiJingWc2008]序列
逃掉数学考试。感觉解几纯粹不给人希望。 这题还是比较有意思。做法是把每位分开预处当总共加了多少的时候这一位上是1的数字有多少个。然后每一层是线性的。询问是O(1)的。 然后发现自己的代码能力已经没救了。 #include <cstdio> #include <cstring> #define pow2(x) (1<<(x)) typedef long long dint; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif const int maxn = 100009; const int maxl = 16; const int maxv = pow2(maxl) - 1; int n, m, c[maxv + 3], *t[maxl], b; dint s; void pre() { for (int i = 0; i < maxl; ++ i) { int len(pow2(i)); t[i] = new int[(len << 1) + 3]; t[i][0] = 0; for (int j = 0; j <= maxv; ++ j)...