zoukankan      html  css  js  c++  java
  • 题解 P1218 【[USACO1.5]特殊的质数肋骨 Superprime Rib】

    看到有人用八重循环做,还写了8个if语句

    其实没有那么麻烦,暴力又时也能体现出技术的美

    记得小学的信奥老师讲:这种n重循环是玩不动暴力

    我:我就玩暴力怎么了

    可以用递归控制循环次数,不必一一判断了

    而且递归可以剪枝

    其他思路和别人基本一样,但真的不是dfs qwq

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    long long n;
    inline bool isprime(long long x)//质数判断
    {
      if(x==1) return 0;
      for(int i=2; i*i<=x; i++)
        if(x%i==0) return 0;
      return 1;
    }
    inline void Make(int k,int now)//递归控制循环次数
    //看到那个inline了吗,非函数用不了这个qwq
    {
      if(k==0)//如果循环到了层数就退出
      {
        cout<<now<<endl;
        return;
      }
      for(int i=1; i<10; i++)//循环填上数字
        if(isprime(now*10+i))//如果符合条件就继续递归
          Make(k-1,now*10+i);
    }
    int main()
    {
      cin>>n;
      Make(n,0);
      return 0;
    }
    

    qwq就是这样辣(484比dfs短好多,还没有压行呢,而且应该不是正解)

    (这是压行的)

    #include <bits/stdc++.h>
    using namespace std;
    long long n;
    inline bool isprime(long long x){ if(x==1) return 0; for(int i=2; i*i<=x; i++) if(x%i==0) return 0; return 1; }
    inline void Make(int k,int now){ if(k==0) { cout<<now<<endl; return; } for(int i=1; i<10; i++) if(isprime(now*10+i)) Make(k-1,now*10+i); }
    int main() { cin>>n; Make(n,0); return 0; }
    

    各位886

  • 相关阅读:
    hdu 6201 dfs
    Oulipo POJ
    Kitchen Measurements UVALive
    Surf Gym
    hoj 13969 Racing Gems
    分块
    分块学习资料
    Jam's problem again HDU
    树的点分治
    Census UVA
  • 原文地址:https://www.cnblogs.com/oierscw/p/12551570.html
Copyright © 2011-2022 走看看