20230925 模拟赛总结

发布时间 2023-09-25 14:11:00作者: liruixiong0101

模拟赛连接

排名:\(\text{rank 1}\)
分数:\(100+100+100+100=400\)

集训期间第二次 AK!

T1:灭火 / fire

题目描述:

求出 \(n\) 个数 \(a_1,a_2,\dots,a_n\) 的和除以 \(m\) 向上取整的结果。(\(0<a_i,m<2^{63},0<n\le20\)

思路:

直接求和,然后向上取整即可,注意要用高精度,我用的是 __int128(注意 __int128 的读入和输出都需要自行模拟)。

代码:

#include <bits/stdc++.h>

using namespace std;

long long n, m, w;
__int128 ans;
string s;

int main() {
  freopen("fire.in", "r", stdin);
  freopen("fire.out", "w", stdout);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> w, ans += w;
  }
  ans = (ans + m - 1) / m;
  for (; ans; ans /= 10) {
    s += ans % 10 + '0';
  }
  reverse(s.begin(), s.end());
  cout << s;
  return 0;
}

T2:数学题 / math

题目描述:

\(n\) 个自然数中任意取出两个数 \(a\)\(b\),保证这两个数满足 \(a \lt b\)。若存在一个自然数 \(c\)\(c\) 不一定属于这 \(n\) 个自然数),能够使得 \(a-c=c-b\),那么将 \((a, b)\) 视为一组可行的数对。(\(0 \lt n \le 100000,0 \lt x \lt 2^{63}\)

思路:

将方程变一下:\(a+b=2c\),也就是 \(a,b\) 的和要是偶数才行。我们知道同奇偶的数相加为偶数,所以我们可以先把那 \(n\) 个自然数去重,然后记录剩下的数的奇偶性,如果剩下的奇数有 \(x\) 个,偶数有 \(y\) 个,那么wo