zoukankan      html  css  js  c++  java
  • ZJU-1003 Crashing Balloon dfs,

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3

    题意(难以描述):A,B两个人从1~100选数乘起来比谁的大(不能选重复的或者对方选的)。数小的人如果发现数大的人在撒谎,则他可以获胜。(当然都没撒谎大数赢,都撒谎了也是大数赢233)而他判断大数撒谎的方法就是找到自己选的一个数,是构成大数所必须的。/*给你两个数,由1~100选取不重复的数乘起来得到的。如果小的那个数包含了某个大数必须包含的因子,则*/

    题解:从1到100枚举构成AB的方法,然后按这个逻辑判断:(A>B)

        if能构成B {

        if能构成A:cout<<A;

        else cout<<B;

          }

      else cout<<B;

    练搜索题时看到的一段超简单代码。

    判断超简单:

    将三个cout用两个flag来简化:具体实现如下。

    搜索超简单:

    从100 到 1 不断除 A或除 B 能除进 就按除掉的数继续dfs;

    dfs结构很漂亮:结尾用dfs代替了循环,开头判断即使结束递归。

    ac代码

    #include<cstdio>  
    #include<algorithm>  
    #include<iostream>
    using namespace std;
    int fa, fb;
    void dfs(int a, int b, int k) {
        if (b == 1) {
            fb = 1;
            if (a == 1)
                fa = 1;
        }
        if (k == 1 || (fa&&fb))return;
        if (a%k == 0)dfs(a / k, b, k - 1);
        if (b%k == 0)dfs(a, b/k, k - 1);
        dfs(a, b, k - 1);
    }
    
    int main() {
        int a, b;
        while (cin >> a >> b) {
            if (a < b)swap(a, b);
            fa = fb = 0;
            dfs(a, b, 100);
            if (fa == 0 && fb == 1) cout << b << endl;
            else cout << a << endl;
    
        }
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    PHP中new static()与new self()的比较
    【程序员感悟系列】 由一点业务说开去
    配置管理工具 Puppet的安装和使用
    【读书笔记】大话设计模式
    博客还是要写起来 2016.08.13 周六
    linux启动SSH及开机自动启动
    Monkey日志信息的11种Event percentages
    Monkey官方帮助翻译&介绍
    Github问题An error occurred trying to download
    怎样克服拖延症,马上采取行动?
  • 原文地址:https://www.cnblogs.com/SuuT/p/8585087.html
Copyright © 2011-2022 走看看