携程笔试最后一题

前三道都ac了,最后一道卡在20,求大佬看看为啥
最后一题
#include <bits/stdc++.h>

using namespace std;

unsigned long long mod = 1e9+7;

int main() {
  int n;
  cin >> n;

  unsigned long long pow = 20;
  if (n == 2) {
    cout << pow;
    return 0;
  }
  unsigned long long side = (4 * n + 1) % mod;
  side = (side * (2 * n - 4)) % mod;
  side = (side * 3) % mod;
  pow += side;
  unsigned long long mid = ((n - 2) * (n - 2)) % mod;
  unsigned long long temp = (n * n + 4 * n - 3) % mod;
  mid = (mid * temp) % mod;
  mid = (mid * 2) % mod;
  pow += mid;
  pow = pow % mod;
  cout << pow;
  return 0;
}
第一题
#include <bits/stdc++.h>

using namespace std;

int main() {
  int n, k;
  cin >> n >> k;

  float s = 0.0;
  if (k % 2 == 0) {
    float parts = k / 2 + 1;
    s = n / parts * n / parts;
  }
  else {
    float partsw = (k - 1) / 2 + 1;
    float partsl = (k + 1) / 2 + 1;
    s = n * n / (partsw * partsl);
  }
  printf("%0.2f", s);

  return 0;
}
第二题,一堆if else
#include <bits/stdc++.h>

using namespace std;

int main() {
  int t;
  cin >> t;
  for (int i = 0; i < t; i++) {
    vector<int> mata(4), matb(4);
    for (int j = 0; j < 4; j++)
      cin >> mata[j];
    for (int j = 0; j < 4; j++)
      cin >> matb[j];
    int check = 0;
    for (int j = 0; j < 4; j++) {
      if ((mata[j] != 0 && mata[j] != 1) || (matb[j] != 0 && matb[j] != 1)) {
        check = 1;
        break;
      }
    }
    if (check) {
      cout << "-1" << endl;
      continue;
    }
    int na1 = 0, nb1 = 0;
    for (int j = 0; j < 4; j++) {
      if (mata[j] == 1)
        na1++;
      if (matb[j] == 1)
        nb1++;
    }

    if (na1 != nb1) {
      cout << "-1" << endl;
      continue;
    }

    if (na1 == 0 || na1 == 4) {
      cout << "0" << endl;
      continue;
    }

    vector<int> matemp(4);
    int sum = 0;
    for (int j = 0; j < 4; j++) {
      matemp[j] = abs(mata[j] - matb[j]);
      sum += matemp[j];
    }
    if (sum == 0) {
      cout << "0" << endl;
    }
    else if ((matemp[0] == 1 && matemp[3] == 1) || (matemp[1] == 1 && matemp[2] == 1)) {
      cout << "2" << endl;
      continue;
    }
    else {
      cout << "1" << endl;
      continue;
    }
  }

  return 0;
}
第三题
#include <bits/stdc++.h>

using namespace std;

int main() {
  int t;
  cin >> t;
  for (int i = 0; i < t; i++) {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int j = 0; j < n; j++)
      cin >> a[j];
    string s;
    cin >> s;

    int maxr = 0, maxb = 0, minr = 1e9 + 1, minb = 1e9 + 1;
    for (int j = 0; j < n; j++) {
      if (s[j] == 'R') {
        maxr = max(a[j], maxr);
        minr = min(a[j], minr);
      }
      else {
        maxb = max(a[j], maxb);
        minb = min(a[j], minb);
      }
    }
    if (maxr == 0) {
      cout << maxb - minb << endl;
      continue;;
    }
    if (maxb == 0) {
      cout << maxr - minr << endl;
      continue;
    }
    if (maxr >= maxb && minr >= minb) {
      cout << maxr - minb << endl;
      continue;
    }
    int difr = maxr - minr;
    int difb = maxb - minb;
    cout << max(difr, difb) << endl;

  }

  return 0;
}




全部评论
求第二题代码
点赞 回复 分享
发布于 2022-09-14 21:08 北京
最后一题我用等差数列求和公式也是20
点赞 回复 分享
发布于 2022-09-14 21:10 甘肃
应该是溢出了。。。
点赞 回复 分享
发布于 2022-09-14 21:13 安徽
开始20,后面自己瞎调,到处加mod,依次加到35 55,最后几分钟调成了,这是ac代码
4 回复 分享
发布于 2022-09-14 21:19 陕西
求第三题代码。。。红蓝球
点赞 回复 分享
发布于 2022-09-14 21:27 德国
python 第四题 先手动求出公式 然后 各个项单独求出取模结果 再相加取模 通过了 要是加在一起再取模就是20%
3 回复 分享
发布于 2022-09-14 21:20 上海
求前三题题解
1 回复 分享
发布于 2022-09-14 21:11 浙江
同20%
点赞 回复 分享
发布于 2022-09-14 21:11 江苏
同学同花顺尝试一下吗,面试简单不造火箭,可全程保姆式跟进度,我帖子有内推
点赞 回复 分享
发布于 2022-09-24 15:51 浙江

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
3
2
分享
牛客网
牛客企业服务