题解
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;
}
时间复杂度:
这里空空如也
有帮助,赞一个