仿照题解的做法用Set,计算和前一个与后一个的差的最小值,全部TLE了??
查看原帖
仿照题解的做法用Set,计算和前一个与后一个的差的最小值,全部TLE了??
69347
syncline楼主2021/1/14 21:31

和题解中那个使用multiset的代码完全相同,但是改成了set

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#define MAX (1000005)
using namespace std;

int min(int a, int b) {
	return (a >= b) ? b : a;
}

set<int> s;
set<int>::iterator iter;

int main() {
	fstream infile, outfile;
	infile.open("turnover.in");
	outfile.open("turnover.out");
	int n;
	infile >> n;
	int a;
	int tiger = 0;
	infile >> a;
	int number;
	s.insert(MAX); s.insert(-1 * MAX); // 插入最大值与最小值
	s.insert(a); tiger = a;
	while (--n) {
		infile >> a;
		if (s.count(a)) {
			number = 0;
		}
		else {
			iter = s.insert(a).first; //set的insert返回一个pair,first为插入位置的迭代器,second为是否插入成功的布尔值
			iter++;
			set<int>::iterator right = iter;
			iter--; iter--;
			set<int>::iterator left = iter;
			if (*right == MAX) {
				number = (a - *left);
			}
			else if (*left == (-1 * MAX)) {
				number = (*right - a);
			}
			else {
				number = min(a - *left, *right - a);
			}
		}
		tiger += number;
	}
	outfile << tiger << endl;
	infile.close();
	outfile.close();
	return 0;
}
2021/1/14 21:31
加载中...