Mecci_miaowu @ 2023-12-08 12:57:43
如题,我每次干完都进行了delete操作,为什么还导致了MLE?
#include<bits/stdc++.h>
using i64 = long long;
struct node{
int cnt = 0;
node *nxt[75] = {};
};
int hash(char ch){
if(ch >= '0' && ch <= '9')return ch - '0' + 52;
if(ch >= 'a' && ch <= 'z')return ch - 'a';
return ch - 'A' + 26;
}
void insert(int id, std::string s, node *root){
++root -> cnt;
if(id == s.length())return;
int h = hash(s[id]);
if(root -> nxt[h] == NULL)root -> nxt[h] = new node;
insert(id + 1, s, root -> nxt[h]);
}
int query(int id, std::string s, node *root){
if(id == s.length())return root -> cnt;
int h = hash(s[id]);
if(root -> nxt[h] == NULL)return 0;
return query(id + 1, s, root -> nxt[h]);
}
void del(node *root){
for(int i = 0; i < 75; ++i)if(root -> nxt[i] != NULL)del(root -> nxt[i]);
delete root;
}
int main(){
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int t;
std::cin >> t;
while(t--){
node *root = new node;
int n, q;
std::cin >> n >> q;
while(n--){
std::string s;
std::cin >> s;
insert(0, s, root);
}
while(q--){
std::string s;
std::cin >> s;
std::cout << query(0, s, root) << '\n';
}
del(root);
}
return 0;
}
by fp0cy1tz6mn4rd_ @ 2023-12-08 13:01:01
@Mecci_miaowu 以我的理解是他只给你那么多空间,你在创建的过程中就已经存不下了
by Mecci_miaowu @ 2023-12-08 13:04:14
@public_sickle 我delete以后那些空间就不能够被重复利用了吗
by Mecci_miaowu @ 2023-12-08 13:05:39
@public_sickle 刚刚测试了不加del()函数的话就有5个MLE了
by fp0cy1tz6mn4rd_ @ 2023-12-08 13:07:43
@Mecci_miaowu 可能占用的空间确实太多,不是重复不重复利用的问题了
by Mecci_miaowu @ 2023-12-08 13:40:17
@public_sickle 把结构体里面那个nxt数组大小改成62 刚刚好的情况 竟然过了
by fp0cy1tz6mn4rd_ @ 2023-12-08 13:41:30
@Mecci_miaowu 所以应该是占用空间的问题了