BZOJ1853 [Scoi2010]幸运数字 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1853
题意概括
求一个区间范围内,近似幸运数字的个数。
定义:
幸运数字:仅由6或者8组成的数字。
近似幸运数字:幸运数字的正整数倍。
题解
我们发现幸运数字很少。
然后,我们考虑容斥。
我们发现原来的大整数除几次机会很小。所以记忆化dfs容斥,中途跳出。
这样可以节省很多时间。
然后居然过去了。
代码
- #include <cstring>
- #include <cstdio>
- #include <cstdlib>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- typedef unsigned long long LL;
- int totluck;
- LL L,R,ans,luck[2050];
- bool alive[2050];
- void df(LL x){
- if (x>R)
- return;
- if (x>0)
- luck[++totluck]=x;
- df(x*10+6);
- df(x*10+8);
- }
- LL gcd(LL a,LL b){
- return b?gcd(b,a%b):a;
- }
- void dfs(int num,int pos,LL Lcm){
- if (pos>totluck){
- if (num==0)
- return;
- if (num%2==1)
- ans+=R/Lcm-(L-1)/Lcm;
- else
- ans-=R/Lcm-(L-1)/Lcm;
- return;
- }
- dfs(num,pos+1,Lcm);
- LL g=Lcm/gcd(Lcm,luck[pos]);
- if (1.0*g*luck[pos]<=R)
- dfs(num+1,pos+1,g*luck[pos]);
- }
- bool cmp(LL a,LL b){
- return a>b;
- }
- int main(){
- scanf("%llu%llu",&L,&R);
- totluck=0;
- df(0);
- sort(luck+1,luck+totluck+1,cmp);
- memset(alive,true,sizeof alive);
- for (int i=1;i<totluck;i++)
- for (int j=i+1;j<=totluck&&alive[i];j++)
- if (luck[i]%luck[j]==0)
- alive[i]=0;
- int to=0;
- for (int i=1;i<=totluck;i++)
- if (alive[i])
- luck[++to]=luck[i];
- totluck=to;
- ans=0;
- dfs(0,1,1);
- printf("%llu\n",ans);
- return 0;
- }
BZOJ1853 [Scoi2010]幸运数字 容斥原理的更多相关文章
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- bzoj1853[Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3027 Solved: 1128[Submit][Status ...
- 1853: [Scoi2010]幸运数字[容斥原理]
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
- [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3202 Solved: 1198[Submit][Status ...
- 【BZOJ1853】[Scoi2010]幸运数字 容斥原理+搜索
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,88 ...
- bzoj1853: [Scoi2010]幸运数字 dp+容斥原理
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是 ...
- BZOJ1853 [Scoi2010]幸运数字
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)
传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...
随机推荐
- ROS安装与卸载
1 版本选择 ROS 虽说也叫操作系统,但它是寄生在 LINUX 操作系统之下的,所以要求大兄弟你的电脑里至少要先有一个 LINUX 操作系统. 而对 ROS 兼容性最好的当属 Ubuntu 操作系统 ...
- CC254x/CC2540/CC2541库函数速查(转)
hci.h 转自:http://blog.csdn.net/xiaoleiacmer/article/details/44036607#t1 //分配内存,应用程序不应该调用这个函数. void *H ...
- find结合rm删除或mv移动文件的方法
删除过期的备份文件,多用find结合rm方法,可以使用-exec或xargs -exec rm -rf {} \; 或 find /home/mysqlbackup -name "*$thi ...
- centos6.5环境基于conga的web图形化界面方式配置rhcs集群
一.简介 RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件.红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用 ...
- 自定义el标签
编写java代码 package com.ycjk.common; public class FormatJSEltarg { public static String format(String s ...
- 强大的Js树型控件Dtree使用详解
http://www.lmwlove.com/ac/ID868 在学习文章之前,要学会看官方网站http://destroydrop.com/javascripts/tree.从官方页面你能知道:dt ...
- VMware环境和Window环境进行网络连接的问题
一. 首先贴出本人在网络上找到与VMware网络连接相关的知识点 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是hos ...
- Android:注册登录
注册登录的实现 先在layout里新建一个xml文件: //login.xml <?xml version="1.0" encoding="utf-8"? ...
- JS/Jquery版本的俄罗斯方块(附源码分析)
转载于http://blog.csdn.net/unionline/article/details/63250597 且后续更新于此 1.前言 写这个jQuery版本的小游戏的缘由在于我想通过从零到有 ...
- [学习笔记]Java代码中各种类型变量的内存分配机制
程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而 ...