您的位置:首页 > 产品设计 > UI/UE

UESTC 1137 邱老师选妹子 dp:?这个难道不是暴力法

2016-02-28 18:28 423 查看


邱老师选妹子


Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)


Submit
Status

邱老师长得帅这是人尽皆知,于是追他的妹子就会很多。
但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人。
于是他决定从追他的众多妹子里挑选一个出来。于是酱神给邱老师出来一个主意,已知有一些妹子,恰好可以给她们从l到r排号,使得每一个妹子有
单独的数字,而正好有r-l+1个妹子。
酱神说,我们不能要运气不好的女孩,而酱神又给了两个数字62和4,如果妹子的排号里面有62(必须是连续的)或4,那么就排除他现在给你l和r,问
有多少妹子可以有幸在第一轮留下。


Input

输入的都是整数对l、r(0<l≤r<1000000),如果遇到都是0的整数对,则输入结束。


Output

每组数据输出占一行,对于每个l和r 输出有多少个妹子可以在第一轮不被排除


Sample input and output

Sample InputSample Output
1 100
0 0

80


Hint

不好的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不好的。但是,61152虽然含有6和2,但不是62连号


Source

2015 UESTC Training for Dynamic Programming
The question is from here.


My Solution

暴力法分分钟过,只是不知道为什么,这个是在dp专题,☺☺
暴力的话 10^6*6,不会超时的。

从 l 到 r 枚举,分别用函数处理每个i
如果 i %10 为4,ans--;return
如果为2,则i /=`10;在看看是6则ans--;return;否则递归下去
但递归出 i == 0,则递归结束

#include <iostream>
#include <cstdio>
using namespace std;
int ans;

void solve(int x)
{
    if(x == 0) return;
    if(x % 10 == 4) {ans--;return;}
    else if(x % 10 == 2){ x /= 10;if(x %10 == 6) {ans--;return;} else solve(x);}
    else solve(x/=10);
}

int main()
{
    int l, r;
    while(scanf("%d%d", &l, &r)){
        if(l == 0 && r == 0) break;
        ans = r-l+1;
        for(int i = l; i <= r; i++){
            solve(i);
        }
        printf("%d\n", ans);
    }
    return 0;
}


Thank you!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: