题解
2024-05-27 13:18:58
发布于:广东
11阅读
0回复
0点赞
本来我用set做的
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set <string> s;
int main(){
	int t;
	string a, b;
	cin >> t;
	while(t--){
		cin >> a;
		if(a == "ADD"){
			cin >> b;
			if(s.find(b) != s.end()) cout << "already exists\n";
			else{
				s.insert(b);
				cout << "success\n";
			}
		}else if(a == "DEL"){
			cin >> b;
			if(s.find(b) == s.end()) cout << "non-existent\n";
			else{
				s.erase(b);
				cout << "seccess\n";
			}
		}else if(a == "VIEW"){
			if(s.empty()) cout << "empty\n";
			else{
				int ct = 0;
				for(auto it : s){
					printf("%d. ", ++ct);
					cout << it << endl;
				}
			}
		}else{
			if(s.find(b) == s.end()) cout << "NO\n";
			cout << "YES\n";
		}
	}
	return 0;
}
结果:WA
不是怎么还不让升序的😅
没办法,只能动手模拟了
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
string a[1005];
int ct = 0;
bool add(string b){//添加
	for(int i = 1; i <= ct; i++) if(a[i] == b) return 0;
	a[++ct] = b;
	return 1;
}bool del(string b){//删除
	int idx = -1;
	for(int i = 1; i <= ct; i++){
		if(a[i] == b){
			idx = i;
			break;
		}
	}if(idx == -1) return 0;
	for(int i = idx; i <= ct; i++){
		a[i] = a[i + 1];
	}ct--;
	return 1;
}bool view(){//查看
	if(ct == 0) return 0;
	for(int i = 1; i <= ct; i++){
		printf("%d. ", i);
		cout << a[i] << endl;
	}return 1;
}bool unlock(string b){//解锁
	for(int i = 1; i <= ct; i++) if(a[i] == b) return 1;
	return 0;
} 
int main(){
	int t;
	string a, b;
	cin >> t;
	while(t--){
		cin >> a;
		if(a == "ADD"){
			cin >> b;
			if(add(b)) cout << "success\n";
			else cout << "already exists\n";
		}else if(a == "DEL"){
			cin >> b;
			if(del(b)) cout << "success\n";
			else cout << "non-existent\n";
		}else if(a == "VIEW"){
			if(view());
			else cout << "empty\n";
		}else{
			cin >> b;
			if(unlock(b)) cout << "YES\n";
			else cout << "NO\n";
		}
	}
	return 0;
}
时间复杂度:
这里空空如也







有帮助,赞一个