社区讨论

使用Set做的,样例过但是3WA 2TLE

P5250【深基17.例5】木材仓库参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lqrudix9
此快照首次捕获于
2023/12/30 17:09
2 年前
此快照最后确认于
2023/12/30 19:47
2 年前
查看原帖
C
#include <bits/stdc++.h>
using namespace std;
set<long> sets;

int main() {
	long n = 0;
	cin >> n;
	for (long i = 1; i <= n; i++) {
		long a, b;
		cin >> a >> b;
		//Input
		if (a == 1) {
			if (sets.find(b) == sets.end())
				sets.insert(b);
			else
				cout << "Already Exist" << endl;
		}
		//Output
		if (a == 2) {
			if (sets.empty()) {
				cout << "Empty" << endl;
			} else {
				//Find
				if (sets.find(b) != sets.end()) {
					cout << b << endl;
					sets.erase(b);
				}
				else {
					long record_1 = 0;
					long record_2 = 0;

					//往左
					for (long i = b - 1; i >= 1; i--) {
						if (sets.find(i) != sets.end()) {
							record_1 = i;
							break;
						}
					}
					//往右
					for (long i = b + 1; i <= *sets.rbegin(); i++) {
						if (sets.find(i) != sets.end()) {
							record_2 = i;
							break;
						}
					}
					
					//判断谁最接近, 当一样接近时,输出短的那个
					if (abs(b - record_1) <= abs(record_2 - b)) {
						cout << record_1 << endl;
						sets.erase(record_1);
					} else {
						cout << record_2 << endl;
						sets.erase(record_2);
					}
				}
			}
		}
	}
	return 0;
}
样例可以过,但是提交是前3个WA 后面俩个TLE 求大佬帮助

回复

1 条回复,欢迎继续交流。

正在加载回复...