zoukankan      html  css  js  c++  java
  • 2020 CCPC Wannafly Winter Camp Day1-F-乘法

    题目传送门

    sol:二分答案$K$,算大于$K$的乘积有多少个。关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的。感觉写着有点困难,自己写了一个复杂度是$O(nlog^{2}n)$,也够AC了。有正有负,控制边界有点难度。

    • 二分答案
      #include <bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      typedef pair<int, int> PII;
      const int MAXN = 1e5 + 10;
      int a[MAXN], b[MAXN];
      int n, m; LL k;
      LL check(LL mid) {
          LL sum = 0;
          for (int i = 1; i <= n; i++) {
              if (a[i] == 0) {
                  if (mid < 0) sum += m;
                  continue;
              }
              if (a[i] > 0) {
                  if (mid >= 0) {
                      sum += b + 1 + m - upper_bound(b + 1, b + 1 + m, mid / a[i]);
                  } else {
                      sum += b + 1 + m - lower_bound(b + 1, b + 1 + m, (mid + 1) / a[i]);
                  }
              } else {
                  if (mid >= 0) {
                      sum += lower_bound(b + 1, b + 1 + m, mid / a[i]) - 1 - (b + 1 - 1);
                  } else {
                      sum += upper_bound(b + 1, b + 1 + m, (mid + 1) / a[i]) - 1 - (b + 1 - 1);
                  }
              }
          }
          return sum;
      }
      int main() {
          scanf("%d%d%lld", &n, &m, &k);
          for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
          for (int i = 1; i <= m; i++) scanf("%d", &b[i]);
          sort(b + 1, b + 1 + m);
          LL l = -1e12 - 10, r = 1e12 + 10;
          while (l + 1 < r) {
              LL mid = l + r >> 1;
              if (check(mid) < k) r = mid;
              else l = mid;
          }
          printf("%lld
      ", r);
          return 0;
      }
  • 相关阅读:
    Id vs Instancetype
    【转】为什么要走出你的心理“舒适区”
    【转】深入浅出 iOS 之生命周期
    【转】Objective-C类初始化:load与initialize
    【转】Cocoapod 的安装和使用
    非对称加密回顾
    iOS中 Proxy和的delegate区别
    IOS 对JSON解析的要求
    内存对齐规则
    KVO 的进一步理解
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/12221332.html
Copyright © 2011-2022 走看看