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;


}
posted @ 2024-02-20 03:02  拍手称快  阅读(136)  评论(0编辑  收藏  举报