• 喵哈哈村的魔法考试 Round #5 (Div.2) B


    喵哈哈村的狼人杀大战(2)

    发布时间: 2017年3月5日 22:47   时间限制: 1000ms   内存限制: 128M

    喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!

    星星同学今天她抽到的是狼的身份,按照她的一贯玩法,她喜欢无情的屠杀掉所有的神。

    她现在已经很清楚了场上的预言家,女巫,猎人是谁。但是她唯一不知道的就是白痴这张神牌在谁的身上。于是她诈一诈她的下家——天行廖。

    星星同学的逻辑是这样的:她可以考一道题给天行廖,如果天行廖能够答上来的话,那么天行廖肯定不是白痴,因为白痴是答不上题的。

    这道题是这样的:

    如果一个数只包含4和7的话,那么这个串就是幸运数,比如4777,774就是幸运数,而467就不是幸运数。

    如果一个幸运数中包含的4和7的数量相同的话,那么这个数就是超级幸运数,比如4747就是超级幸运串,447就不是。

    现在给你一个n,你需要找到一个最小的超级幸运数,并且这个超级幸运数大于等于n。

    本题包含若干组测试数据。
    第一行一个整数n。

    满足 1<=n<=10^9

    输出最小的超级幸运数,。

    复制
    47
    4500
    47
    4747

    一开始看错题意了...以为是小于等于n的最大幸运数...
    后来才发现是大于等于n...
    原来我的做法就是枚举啊...(辣鸡就只能想到枚举 了)
    后来看题解...dfs可以解决啊...
    去搜4和7的个数...然后check
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #include<stdlib.h>
     5 #include<cstring>
     6 #include<map>
     7 using namespace std;
     8 typedef long long ll;
     9 ll n, ans;
    10 map<ll, int>flag;
    11 
    12 void dfs(int x, int y, ll sum){
    13     if(sum>=1e11)return;
    14     if(flag[sum]==1)return;
    15     if(x==y&&sum>=n){
    16         ans=min(ans, sum);
    17         flag[sum]=1;
    18         return;
    19     }
    20     dfs(x+1, y, sum*10+4);
    21     dfs(x, y+1, sum*10+7);
    22 }
    23 void solve(){
    24     ans=1e10;
    25     flag.clear();    //每次计算都要记得初始化...
    26     dfs(0, 0, 0);
    27     cout<<ans<<endl;
    28 }
    29 int main(){
    30     while(cin>>n){
    31         solve();
    32     }
    33     
    34     return 0;
    35 }


  • 相关阅读:
    javascript继承对象冒充
    javascript原型prototype(2)
    javascript继承call()和apply实现继承
    javascript继承原型链继承
    javascript原型prototype(3)
    没有宽高的情况下实现水平垂直居中
    TCP协议
    什么是模块化?模块化的好处是什么?
    数组中嵌套数组,转化为一个数组形式/二维数组转化为一维数组
    常见的请求头类型
  • 原文地址:https://www.cnblogs.com/ledoc/p/6558994.html
Copyright © 2020-2023  润新知