Eason

Acceteped : 57   Submit : 129
Time Limit : 1000 MS   Memory Limit : 65536 KB

Description

题目描述

Eason是个非常迷信的人,他喜欢数字3和6,不喜欢4和7。 如果一个数字的数码中没有4和7,而有3或者6的话,他就会喜欢这个数字。 比如,他会喜欢13,36,但是不会喜欢14,34。但对于28这种的,他就无所谓喜欢还是不喜欢。 Eason想知道区间[a,b]中一共有多少个他喜欢和不喜欢的数字?

输入

每行输入一个样例,为a和b,0≤a≤b≤106。如果a和b都为0,那么输入结束,这个样例不需要处理。

输出

每行输出一个样例的结果,先输出喜欢数字的个数,再输出不喜欢数字的个数。

样例输入

1 10
1 100
1 1000000
0 0

样例输出

2 2
28 36
215488 737856
 

Sample Input

 
 

Sample Output

 
 

Source

解题:暴力或者数位dp乱搞

先上暴力的解法:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <cstdlib>
#include <string>
#include <set>
#include <stack>
#define LL long long
#define INF 0x3f3f3f3f
#define pii pair<int,int>
using namespace std;
int ans[],uu[];
void go(int dep,int cur,int step,bool like,bool ulike){
if(step > dep || like && ulike) return;
ans[cur] = like;
if(!like && !ulike) uu[cur] = ;
for(int i = step?:; i <= ; ++i)
go(dep,cur*+i,step+,like||i == ||i == ,ulike||i == ||i == );
}
int main(){
go(,,,false,false);
uu[] = ;
for(int i = ; i < ; ++i){
ans[i] += ans[i-];
uu[i] += uu[i-];
}
int a,b;
while(scanf("%d %d",&a,&b),a||b){
int tmp = ans[b]-ans[a-];
printf("%d %d\n",tmp,(b-a+)-(uu[b]-uu[a-])-tmp);
}
return ;
}

写得比较挫,很多冗余计算。。。后来改了下,起码好看得多了

 #include <cstdio>
int ans[],uu[],arr[] = {,,,,,,,},a,b;
bool check[] = {false,false,false,true,false,true};
void go(int dep,int cur,int step,bool like){
if(step > dep) return;
if(like) ans[cur] = ;
else uu[cur] = ;
for(int i = step?:; i < ; ++i)
go(dep,cur*+arr[i],step+,like||check[i]);
}
int main(){
go(,,,false);
uu[] = ;
for(int i = ; i < ; ++i){
ans[i] += ans[i-];
uu[i] += uu[i-];
}
while(scanf("%d %d",&a,&b),a||b){
int tmp = ans[b]-ans[a-];
printf("%d %d\n",tmp,(b-a+)-(uu[b]-uu[a-])-tmp);
}
return ;
}

然后是数位dp

 #include <cstdio>
#include <cstring>
int dp[][];
void calc(char *str,int &x,int &y){
bool xh = false,bxh = false;
int len = strlen(str);
static const int cnt[] = {,,,,,,,,,};
static const int cnt2[] = {,,,,,,,,,};
for(int i = x = y = ; str[i+]; ++i){
int p = (str[i] > '') + (str[i] > '');
if(!bxh){
if(xh) x += cnt[str[i]-'']*(dp[len-i-][]+dp[len-i-][]);
else{
x += cnt[str[i]-'']*dp[len-i-][] + p*dp[len-i-][];
y += cnt2[str[i]-'']*dp[len-i-][];
}
}
if(str[i] == '' || str[i] == '') bxh = true;
if(str[i] == '' || str[i] == '') xh = true;
}
for(int i = ; i <= str[len-]-''; ++i){
if(!xh && !bxh &&(i == || i == )) ++x;
if(xh && !bxh && i != && i != ) ++x;
if(!bxh && !xh && i != && i != && i != && i != ) ++y;
}
}
int main(){
dp[][] = ;
dp[][] = ;
for(int i = ; i <= ; ++i){
dp[i][] = (dp[i-][]<<) + (dp[i-][]<<);
dp[i][] = *dp[i-][];
}
char str[];
int a,b;
while(scanf("%d %d",&a,&b),a||b) {
int x,y,x1,y1;
sprintf(str,"%d",--a);
calc(str,x,y);
sprintf(str,"%d",b);
calc(str,x1,y1);
int tmp = x1 - x;
printf("%d %d\n",tmp,b-a-tmp-y1+y);
}
return ;
}

1193 Eason的更多相关文章

  1. bzoj 1193 贪心

    如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...

  2. bzoj 1193

    http://www.lydsy.com/JudgeOnline/problem.php?id=1193 大范围贪心,小范围宽搜. 膜拜大神 http://blog.csdn.net/u0129155 ...

  3. bzoj 1193 贪心+bfs

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2015  Solved: 914[Submit][Statu ...

  4. 1193: [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 915[Submit][Statu ...

  5. 九度OJ 1193:矩阵转置 (矩阵计算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1673 解决:1132 题目描述: 输入一个N*N的矩阵,将其转置后输出.要求:不得使用任何数组(就地逆置). 输入: 输入的第一行包括一个 ...

  6. BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...

  7. hpuoj 1193: Interval

    Interval [STL.双指针.二分] 题目链接 http://acm.hpu.edu.cn/problem.php?id=1193 或者 题目链接 http://acm.nyist.net/Ju ...

  8. Vijos 1193 扫雷 【动态规划】

    扫雷 描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它 ...

  9. JOBDU 1193 矩阵转置

    啊!!!这道题目今天竟然写错了!!!这道题目巨坑,说不能用数组,结果竟然是用数组做的,吐血!!! 看的所有有关博文,都是用数组做的,晕倒!真的出题人有毛病,出这种题,又不限制运行!!! 以后再遇到这种 ...

随机推荐

  1. atom安装插件失败 latex

    用atom写latex 链接 http://www.cnblogs.com/schaepher/p/5934184.html 但在gui下安装插件失败 按照以下步骤解决了 安装gitbash cd . ...

  2. HTML、CSS规范

    作为一名前端开发者,至少要对HTML.CSS规范有个了解,然后尝试在项目是使用,以便别人阅读你代码的时候,也相对轻松点. HTML.CSS规范,参见:编码规范 by @mdo JavaScript 参 ...

  3. 自己编写并发布一个Vue组件

    自己编写并发布一个Vue组件 1. 几种开源协议的介绍 https://blog.csdn.net/techbirds_bao/article/details/8785413 2.开始编写组件 新建p ...

  4. js获取当前根目录的方法

    function getRootPath_web() { //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp var curWwwP ...

  5. [HNOI2004]打砖块(敲砖块)

    题目:codevs1257.洛谷P1437 题目大意:有一些砖块呈倒三角形状,每块砖敲掉后有一个分数.除第一行外,敲掉一块砖必须先把上面两块砖敲掉.现在你能敲m块砖,求能得到的最大分数. 解题思路:此 ...

  6. maven 安装jar包

    1 下载maven: 下载路径: http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-b ...

  7. 【codeforces 335A】Banana

    [题目链接]:http://codeforces.com/contest/335/problem/A [题意] 让你构造一个长度为n的字符串; 每次你可以从这个字符串中任意取走字符; 让你求出取的次数 ...

  8. OpenCASCADE点向平面投影

    OpenCASCADE点向平面投影 OpenCASCADE的ProjLib类提供了解析曲线(直线.圆.椭圆.抛物线.双曲线)向解析曲面(平面.圆柱面.圆锥面.球面.圆环面)投影的功能,主要用来计算三维 ...

  9. linux文件时间的查看和改动touch

    1. linux文件的时间 linux下文件时间主要有以下三种: 1.1 modification time(mtime) 文件改动时间.即文件内容的改动时,更新这个时间.不包含文件权限和属性的改动. ...

  10. c++命名规范与代码风格

    http://blog.sina.com.cn/s/blog_a3a8d0b1010100uw.html http://www.cnblogs.com/len3d/archive/2008/02/01 ...