幸运数字(number)
幸运数字(number)
Time Limit:1000ms Memory Limit:64MB
【题目描述】
LYK最近运气很差,例如在NOIP初赛中仅仅考了90分,刚刚卡进复赛,于是它决定使用一些方法来增加自己的运气值。它觉得,通过收集幸运数字可以快速的增加它的RP值。它给幸运数字下了一个定义:如果一个数x能被3整除或被5整除或被7整除,则这个数为幸运数字。于是它想让你帮帮它在L~R中存在多少幸运数字。
【输入格式】(number.in)
第一行两个数L,R。
【输出格式】(number.out)
一个数表示答案。
【输入样例】
10 15
【输出样例】
4
【数据范围】
对于50%的数据1<=L<=R<=10^5。
对于60%的数据1<=L<=R<=10^9。
对于80%的数据1<=L<=R<=10^18。
对于90%的数据1<=L<=R<=10^100。
对于另外10%的数据L=1,1<=R<=10^100。
对于100%的数据L,R没有前导0。
【题目分析】
从L到R中能被3 5 7整除的数字,那就算一下这个区间:3的倍数+5的倍数+7的倍数-15的倍数-35的倍数-21的倍数+105的倍数(容斥原理),要注意计算L之内的数的个数时,L不能算在内(跟 前缀和是同样的原理)
我们会发现后面还有两组数据的R<=10^100T_T ,高精,弃了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long l,r;
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%I64d%I64d",&l,&r);
l--;
long long ans1=l/+l/+l/-l/-l/-l/+l/;
long long ans2=r/+r/+r/-r/-r/-r/+r/;
cout << ans2-ans1;
fclose(stdin);fclose(stdout);
return ;
}
蒟蒻80
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
char s1[],s2[];
int S1[],S2[],len1,len2,s[],S[],i;
void pl(int *a,int *b)
{
for (int i=a[]+; i<=b[]; i++) a[i]=;
for (int i=; i<=b[]; i++) a[i]+=b[i];
a[]=max(a[],b[]);
for (int i=; i<a[]; i++) if (a[i]>=) {a[i+]++; a[i]-=;}
if (a[a[]]>=) {a[a[]+]=; a[a[]]-=; a[]++;}
}
void mn(int *a,int *b)
{
for (int i=a[]+; i<=b[]; i++) a[i]=;
for (int i=; i<=b[]; i++) a[i]-=b[i];
for (int i=; i<a[]; i++)
if (a[i]<) {a[i]+=; a[i+]--;}
while (a[]> && a[a[]]==) a[]--;
}
void work(int *a,int b,int *c)
{
for (int i=; i<=a[]; i++) c[i]=a[i];
for (int i=a[]; i>=; i--)
{
c[i-]+=c[i]%b*;
c[i]/=b;
}
c[]=a[];
while (c[]> && c[c[]]==) c[]--;
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%s",s1);
scanf("%s",s2);
len1=strlen(s1);
len2=strlen(s2);
for (i=; i<=len1; i++) S1[len1-i+]=s1[i-]-'';
S1[]=len1;
for (i=; i<=len2; i++) S2[len2-i+]=s2[i-]-'';
S2[]=len2;
work(S2,,s);
work(S2,,S);
pl(s,S);
work(S2,,S);
pl(s,S);
work(S2,,S);
mn(s,S);
work(S2,,S);
mn(s,S);
work(S2,,S);
mn(s,S);
work(S2,,S);
pl(s,S);
S[]=; S[]=;
mn(S1,S);
work(S1,,S);
pl(s,S);
work(S1,,S);
pl(s,S);
work(S1,,S);
pl(s,S);
work(S1,,S);
mn(s,S);
work(S1,,S);
mn(s,S);
work(S1,,S);
mn(s,S);
work(S1,,S);
mn(s,S);
for (i=s[]; i>=; i--) cout<<s[i];
return ;
}
std的话是长这个样子的
幸运数字(number)的更多相关文章
- 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字
美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...
- 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2472 Solved: 911 Description 在中国 ...
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- BZOJ 1853 【Scoi2010】 幸运数字
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认 为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,8 ...
- BZOJ 4568 幸运数字
题目传送门 4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Description A 国共有 n 座城市,这些城市由 n-1 ...
- BZOJ 1853: [Scoi2010]幸运数字
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2117 Solved: 779[Submit][Status] ...
- 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 238 Solved: 113[Submit][Status ...
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- BZOJ1853 [Scoi2010]幸运数字
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- 在centos中编译putty时提示找不到gtk库的解决办法
明明已经安过gtk了, 后来在csdn上发现了前人的解决办法 yum install libgnomeui-devel 现在编译出来的putty就可以有图形界面了
- Left Join 与Right Join 与 Inner Join 与 Full Join的区别
首先看看Left Join 与Right Join 与 Inner Join 与 Full Join对表进行操作后得到的结果. 在数据库中新建两张表,并插入要测试的数据. 新建表: USE [Test ...
- android 百度地图定位开发2
先下载了示例代码 进行配置(可查看开发 指南 Hello BaiDuMap) 第一步:创建并配置工程(具体方法参见工程配置部分的介绍): 第二步:在AndroidManifest中添加开发密钥.所需权 ...
- android 学习随笔二十(多媒体编程 )
1.图片处理 加载大图片 图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 * 单色图:每个像素占用1/8个字节* 16色图:每个像素占用1/2个字节* 256色图:每个像素占用1个 ...
- shell expr 文件扩展名判断 整数判断
expr "text.sh" : ".*\.sh" &>/dev/null && echo "yes" ||e ...
- shell 加减乘除
#!/bin/basha=$1b=$2echo a+b=$(($a+$b))echo a-b=$(($a-$b))echo a*b=$(($a*$b))echo a/b=$(($a/$b))echo ...
- 【secureCRT】中文乱码问题
Options->Session Options->Appearance->Font->新宋体 字符集:中文GB2312 ->Character encoding 为UT ...
- javaWeb 使用jsp标签进行防盗链
/** * 1.新建类继承SimpleTagSupport * 新建2个属性, 添加对应的set方法 * 覆盖doTag()方法 */ import java.io.IOException; impo ...
- Linux异步IO【转】
转自:http://blog.chinaunix.net/uid-24567872-id-87676.html Linux® 中最常用的输入/输出(I/O)模型是同步 I/O.在这个模型中,当请求发出 ...
- shell获取目录下最新的文件,文件是以日期命名
如果你为每个文件按日期命名的格式都一致的话,那么 "ls -l" 命令列出的文件列表就是默认按文件名称(日期先后)排序的.那么最后一个就是最新的,文件名可以用以下方式获取.file ...