• 牛客-小w的a=b问题


    题目传送门

    sol1:老实做,预处理出所有2到1e5的素数,对所有数进行分解质因数,然后对比因子个数。感觉有点卡常,用了快读然后多次优化之后才过的,map也用上了。

    • 素数筛,快速分解质因数
      #include "bits/stdc++.h"
      using namespace std;
      typedef long long LL;
      const int MAXN = 1e5 + 10;
      bool v[MAXN];
      map<int, int> mp;
      int p[MAXN], pos;
      int a[MAXN], b[MAXN];
      LL ca[MAXN], cb[MAXN];
      void init() {
          for (int i = 2; i <= 1e5; i++) {
              if (v[i] == false) {
                  p[++pos] = i;
                  mp[i] = pos;
                  for (int j = i << 1; j <= 1e5; j += i)
                      v[j] = true;
              }
          }
      }
      inline int read() {
          int n = 0;
          char c = getchar();
          while (c < '0' || c > '9') c = getchar();
          while (c >= '0' && c <= '9') {
              n = n * 10 + (c ^ '0');
              c = getchar();
          }
          return n;
      }
      void fun(int k, int c, LL* a) {
          for (int i = 1; v[k]; i++) {
              while (k % p[i] == 0) {
                  k /= p[i];
                  a[i] += c;
              }
          }
          if (k != 1) a[mp[k]] += c;
      }
      int main() {
          init();
          int t, n, m, k;
          t = read();
          while (t--) {
              n = read(), m = read();
              memset(ca, 0, sizeof(LL) * (pos + 1));
              memset(cb, 0, sizeof(LL) * (pos + 1));
              for (int i = 1; i <= n; i++) a[i] = read();
              for (int i = 1; i <= m; i++) b[i] = read();
              sort(a + 1, a + 1 + n);
              sort(b + 1, b + 1 + m);
              k = 1;
              for (int i = 1; i <= a[n]; i++) {
                  while (i > a[k]) k++;
                  fun(i, n - k + 1, ca);
              }
              k = 1;
              for (int i = 1; i <= b[m]; i++) {
                  while (i > b[k]) k++;
                  fun(i, m - k + 1, cb);
              }
              bool ok = true;
              for (int i = 1; i <= pos; i++) {
                  if (ca[i] != cb[i]) {
                      ok = false;
                      break;
                  }
              }
              if (ok) puts("equal");
              else puts("unequal");
          }
          return 0;
      }

    sol2:题解上说用哈希。虽然一开始也有想到哈希,但是怕哈希冲突,没怎么在比赛中用过哈希,没有哈希的意识。知道用哈希之后代码就信手拈来了,不过还是产生了一次哈希冲突,不要用1e9 + 7这种特殊素数,决定还是使用2147483587(int范围第二大的素数,怕最大的会被卡)。

    • 哈希
      #include "bits/stdc++.h"
      using namespace std;
      const int MAXN = 1e5 + 10;
      const int MOD = 2147483587;
      int a[MAXN], b[MAXN];
      int quick_pow(int n, int k) {
          int ans = 1;
          while (k) {
              if (k & 1) ans = 1LL * ans * n % MOD;
              n = 1LL * n * n % MOD;
              k >>= 1;
          }
          return ans;
      }
      int main() {
          int t, n, m, k;
          scanf("%d", &t);
          while (t--) {
              scanf("%d%d", &n, &m);
              for (int i = 1; i <= n; i++)
                  scanf("%d", &a[i]);
              for (int i = 1; i <= m; i++)
                  scanf("%d", &b[i]);
              sort(a + 1, a + 1 + n);
              sort(b + 1, b + 1 + m);
              int ha = 1, hb = 1;
              k = 1;
              for (int i = 1; i <= a[n]; i++) {
                  while (i > a[k]) k++;
                  ha = 1LL * ha * quick_pow(i, n - k + 1) % MOD;
              }
              k = 1;
              for (int i = 1; i <= b[m]; i++) {
                  while (i > b[k]) k++;
                  hb = 1LL * hb * quick_pow(i, m - k + 1) % MOD;
              }
              if (ha == hb) puts("equal");
              else puts("unequal");
          }
          return 0;
      }
  • 相关阅读:
    内存的静态分配和动态分配
    C#中堆和栈的区别分析
    NHibernate中的API
    我心中的核心组件(可插拔的AOP)~大话开篇及目录
    简单ORM工具的设计和编写,自己项目中曾经用过的
    NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
    NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
    [NHibernate] Guid 作主键速度超慢的背后
    技术分析淘宝的超卖宝贝
    日志打屏对性能有多少影响
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/11431555.html
Copyright © 2020-2023  润新知