Codeforces Round 928 (Div. 4)赛后总结
A
纯水
B
没仔细看题目,思考太多了,其实只有三角和正方形两种情况,一开始想了一堆奇奇怪怪的图形来恶心自己(主要是最近被hack太多了),后面看其他题目无果再回来看发现因为题目本身就只有两个图形,非常好判断。
C(重点)
首先,题目有卡时间0.5s.我意识到了,但却没有啥好办法。尝试正常模拟累加过程,果然t了。
补充知识点:
cf时间复杂度是$$t+nlogn$$
我之前一直以为每个t他都是单独算时间的。
我想过预处理所有答案的值,但由于一开始不知道t是总和算时间,太可惜了(掉大分了)
正确答案
就是直接模拟一遍所有值的答案,用数组存储(用到一点前缀和思想)做预处理,最后直接输出数字所对应的数组答案就行。
D
核心思路
知道2147483647是一组数据的和就很好做了,逐一判断就行。
由于数字过大没办法开数组用桶,所以用map做映射。
map的具体用法
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <math.h>
#include <map>
#define ll long long
using namespace std;
const int N = 2e5 + 10;
ll a[N];
int n;
ll ans = 0;
ll tr = 2147483647;
int main() {
int tt;
cin >> tt;
while (tt--) {
ans = 0;
cin >> n;
map<int, int >mp;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
if (mp[tr - a[i]]) {
mp[tr - a[i]]--;
} else {
ans++;
mp[a[i]]++;
}
}
cout << ans << endl;
}
return 0;
}