2 条题解

  • 0
    @ 2025-10-8 16:51:28
    #include <bits/stdc++.h>
    using namespace std;
    const int inf = 0x3f3f3f3f;
    int len, a[1100], b[1100], m1, m2;
    
    int check(int s) {
        if (len == 0) return 0;
        int ret = 0;
        for (int i = 1; i <= len; i++) {
            if (s % a[i] != 0) return inf;
            int t = 0; while (s % a[i] == 0) s /= a[i], t++;
            ret = max(ret, (b[i] * m2 + t - 1) / t);
        }
        return ret;
    }
    
    int main() {
        int n; scanf("%d", &n);
        scanf("%d%d", &m1, &m2);
        len = 0;
        for (int i = 2; i * i <= m1; i++) if (m1 % i == 0) {
            a[++len] = i;
            while (m1 % i == 0) {
                b[len]++;
                m1 /= i;
            }
        }
        if (m1 > 1) { a[++len] = m1; b[len] = 1; }
        int ans = inf;
        for (int i = 1; i <= n; i++) {
            int s; scanf("%d", &s);
            int t = check(s);
            ans = min(ans, t);
        }
        if (ans == inf) printf("-1\n"); else printf("%d\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:19
      #include<bits/stdc++.h>
      using namespace std;
      const int inf=0x3f3f3f3f;
      int len,a[1100],b[1100],m1,m2;
      int check(int s)
      {
          if(len==0) return 0;
          int ret=0;
          for(int i=1;i<=len;i++)
          {
              if(s%a[i]!=0) return inf;
              int t=0;while(s%a[i]==0) s/=a[i],t++;
              ret=max(ret,(b[i]*m2+t-1)/t);
          }
          return ret;
      }
      int main()
      {
          int n;scanf("%d",&n);
          scanf("%d%d",&m1,&m2);
          len=0;
          for(int i=2;i*i<=m1;i++)if(m1%i==0)
          {
              a[++len]=i;
              while(m1%i==0)
              {
                  b[len]++;
                  m1/=i;
              }
          }
          if(m1>1){a[++len]=m1;b[len]=1;}
          int ans=inf;
          for(int i=1;i<=n;i++)
          {
              int s;scanf("%d",&s);
              int t=check(s);
              ans=min(ans,t); 
          }
          if(ans==inf)printf("-1\n");else printf("%d\n",ans);
          return 0;
      }
      • 1

      【模拟(难度:8)】[NOIP 2009 普及组] 细胞分裂

      信息

      ID
      657
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      27
      已通过
      13
      上传者