BZOJ1853: [Scoi2010]幸运数字(容斥原理)
题意询问区间$(l,r)$中有多少个数是只含$6,8$的数的倍数 Sol思路很妙啊。 首先在$10^{10}$内只含$6,8$的数有$sum_{i = 1}^{10} 2^i = 2046$个。 然后去掉相同的,应该是有$943$个。 之间算不好算,考虑用容斥原理。 但是直接容斥的复杂度很显然是$2^n$的 考虑剪枝! 当前的数大于上界,肯定要return 由于题目规定的数在$sqrt {10^{10}}$内也就十几个,因此是可以跑过的。 注意中间算lcm的时候是会爆long long的!我们需要先转成double,再判断 // luogu-judger-enable-o2 // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include #include #include #include #include #include #define int long long //#define int long long using namespace std; const int MAXN = 1e6; inline int read() { char c = getchar(); int x = 0,f = 1; while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0',c = getchar(); return x * f; } int Mx = 10000000000LL; vector int flag[MAXN],vis[MAXN],b[MAXN],out,cnt; void Pre(int now) { if(now >= Mx) return ; a.push_back(now); Pre(now * 10 + 6); Pre(now * 10 + 8); } void dfs(int x,int opt,int l,int r,int pre) { if(x > r) return ; //printf("%I64dn",out); out += opt * (r / x - l / x); for(int i = pre + 1; i <= cnt; i++) { int g = __gcd(x,b[i]); if((double) (x / g) * b[i] > (double)r) return; dfs(x / g * b[i],opt * -1,l,r,i); } } int solve(int l,int r) { out = 0; for(int i = 1; i <= cnt; i++) dfs(b[i],1,i); return out; } main() { Pre(6); Pre(8); //printf("%d",a.size()); for(int i = 0; i < a.size(); i++) for(int j = 0; j < a.size(); j++) if((i != j) && (a[j] > a[i]) && (a[j] % a[i] == 0)) flag[j] = 1; //printf("%dn",si); for(int i = 0; i < a.size(); i++) if(!flag[i]) b[++cnt] = a[i]; sort(b + 1,b + cnt + 1,greater //for(int i = 1; i <= cnt; i++) //- printf("%dn",cnt); int a = read(),b = read(); printf("%lld",solve(a - 1,b) + 1); return 0; } /* 2 10000000000 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java+selenium chrome 常见的问题WebDriverException: unkn
- 如何在PostgreSQL中查找字符串中特定字符的第一次和最后一次
- c – 来自std :: promise的未知异常
- 如何遏制 PostgreSQL WAL 的疯狂增长
- objective-c – CVMetalTextureGetTexture ownerhsip?
- Oracle 要将 Java EE 移交给 Eclipse 基金会
- dojo.declare 详解
- c# – 如何将CancellationTokenSource附加到DownloadString
- swift 快速奔跑的兔几 本节的内容是:基于文档的应用程序
- ruby-on-rails – 续集与ActiveRecord的任何陷阱?