• Hankson 的趣味题


    题解:

    硬是把一道傻逼题写到了200行。。

    长长的模板就有70行。。

    由于我没有做的时候觉得并不保证$a1|a0$ $b0|b1$ 然后就加了很多特判。。

    我的做法就是暴力分解质因数

    T*sqrt(n)/log(n)

    #include <bits/stdc++.h>
    using namespace std;
    #define rint register int
    #define rg register
    #define IL inline
    #define ll long long
    #define rep(i,h,t) for (int i=h;i<=t;i++)
    #define dep(i,t,h) for (int i=t;i>=h;i--)
    #define setit set<int>::iterator
    #define fi first
    #define se second
    #define mp make_pair
    #define me(x) memset(x,0,sizeof(x))
    #define mid ((h+t)>>1)
    #define mid2 ((h+t+1)>>1)
    char ss[1<<24],*A=ss,*B=ss;
    IL char gc()
    {
      return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++;
    }
    template<class T>void read(T &x)
    {
      rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48);
      while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f;
    }
    char sr[1<<24],z[20]; int Z,C=-1;
    template<class T>void wer(T x)
    {
      if (x<0) sr[++C]='-',x=-x;
      while (z[++Z]=x%10+48,x/=10);
      while (sr[++C]=z[Z],--Z);
    }
    IL void wer1()
    {
      sr[++C]=' ';
    }
    IL void wer2()
    {
      sr[++C]='
    ';
    }
    template<class T>IL void maxa(T &x,T y)
    {
      if (x<y) x=y;
    }
    template<class T>IL void mina(T &x,T y)
    {
      if (x>y) x=y;
    }
    template<class T>IL T MAX(T x,T y)
    {
      return x>y?x:y;
    }
    template<class T>IL T MIN(T x,T y)
    {
      return x<y?x:y;
    }
    const int N=5e4;
    const int M=N+1e3;
    int f[M],cnt,g1[M],g2[M],g3[N],g4[N];
    bool t[M],tt;
    IL int fj(int *a,int b)
    {
      rep(i,1,cnt)
        while (b%f[i]==0) a[i]++,b/=f[i];
      return b;
    }
    IL void prf()
    {
      wer(0); wer2();
      tt=1;
    }
    int main()
    {
      freopen("1.in","r",stdin);
      freopen("1.out","w",stdout);
      rep(i,2,N)
        if (!t[i])
        {
          for (int j=2;j*i<=N;j++) t[i*j]=1;
        }
      rep(i,2,N) if (!t[i]) f[++cnt]=i;
      int n,a0,a1,b0,b1;
      read(n);
      rep(i,1,n)
      {
        read(a0); read(a1); read(b0); read(b1);
        rep(j,1,cnt) g1[j]=g2[j]=g3[j]=g4[j]=0;
        int t1,t2,t3,t4;
        t1=fj(g1,a0); t2=fj(g2,a1);
        t3=fj(g3,b0); t4=fj(g4,b1);
        ll ans=1;
        tt=0;
        rep(i,1,cnt)
        {
          if (g1[i]<g2[i]||g3[i]>g4[i])
          {
            prf(); break;
          }
          if (g1[i]>g2[i])
          {
            if (g3[i]<g4[i]) 
              if (g4[i]!=g2[i])
              { 
                prf(); break;
              }
            if (g3[i]==g4[i])
            {
              if (g3[i]<g2[i])
              {
                prf(); break;
              }
            }
          } else
          {
            if (g3[i]<g4[i])
              if (g4[i]<g2[i])
              {
                prf(); break;
              }
            if (g3[i]==g4[i])
            {
              if (g3[i]<g2[i])
              {
                prf(); break;
              } else
              {
                ans*=(g3[i]-g2[i]+1);
              }
            }
          }
        }
        if (tt) continue;
        if (t2!=1)
        {
          if (t1!=t2)
          {
            prf();
          } else
          {
            if ((t3!=1&&t3!=t2)||(t4!=t2)) prf();
            else wer(ans),wer2();
          }
        } else
        {
          if (t1==1)
          {
            if (t4==1&&t3==1)
            {
              wer(ans); wer2();
            } else
            if (t4==1&&t3!=1)
            {
              prf();
            } else
            if (t4!=1&&t3==1)
            {
              wer(ans); wer2();
            } else
            {
              if (t4==t3) wer(ans*2),wer2();
              else prf();
            }
          } else
          {
            if (t4==1&&t3==1)
            {
              wer(ans); wer2();
            } else
            if (t4==1&&t3!=1)
            {
              prf();
            } else
            if (t4!=1&&t3==1)
            {
              if (t1!=t4) wer(ans),wer2();
              else prf();
            } else
            {
              if (t3==t4)
                if (t3!=t1) wer(ans*2),wer2();
                else wer(ans),wer2();
              else prf();
            }
          }
        }
      }
      fwrite(sr,1,C+1,stdout);
      return 0;
    }
  • 相关阅读:
    机器学习-分类算法-决策树,随机森林10
    机器学习-分类算法-模型选择与调优09
    机器学习-分类算法-精确率和召回率08
    机器学习-分类算法-朴素贝叶斯算法07
    机器学习-分类算法-K-近邻算法06
    java读取自定义配置文件并引用
    kafka发布消息报错LEADER_NOT_AVAILABLE
    Kettle位置参数(Argument)、命名参数(Parameter)、变量(Variable)
    kettle里的两个参数和一个变量
    如何在命令行下运行kettle的作业(job)和转换(transform)
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9933188.html
Copyright © 2020-2023  润新知