stupie_fish @ 2023-08-31 20:08:50
我用的希尔数组,第一个RE,有一个MLE,有一个TLE,有没有大佬用希尔数组通过的指导一下
#include<iostream>
using namespace std;
#define xer 2000
struct {
int b[xer];//存储格子序号
int v[xer];//存储格子中物品的值
}a[100000];
int n, q, i, j, k, c;
void alter()
{
int o = j % xer;
if (a[i].b[o] == 0)//未被存储
{
a[i].b[o] = j;
a[i].v[o] = k;
}
else if (a[i].b[o] != 0 && a[i].b[o] == j)
{
a[i].v[o] = k;
}
else//该格子被使用过了,需要找寻j格子或者第一次存储j格子
{
int p = o, flag = 0;//flag表示i个寄包柜的j个格子中是否已经被存储过
while (a[i].b[o] != j)
{
p++;
if (p == xer)
p = 0;
if (p == o)
{
flag = 1;
break;
}
}
if(flag==0)//被存储过则直接修改
a[i].v[o] = k;
else//未被存储
{
while (a[i].b[p] != 0)
{
p++;
if (p == xer)
p = 0;
}
a[i].b[p] = j;
a[i].v[p] = k;
}
}
}
void print()
{
int o = j % xer;
while (a[i].b[o] != j)
{
o++;
if (o == xer)
o = 0;
}
cout << a[i].v[o] << endl;
}
int main()
{
cin >> n >> q;
for (int m = 0; m < q; m++)
{
cin >> c >> i >> j;
if (c == 1)
{
cin >> k;
alter();
}
else
print();
}
return 0;
}
by woshidabian @ 2023-09-02 17:08:41
用STL模板里的map啊,你这肯定空间超限
by stupie_fish @ 2023-09-06 22:13:33
@woshidabian 哈哈哈,改了一个晚上,用哈希表解决了 map可以用,不过我更喜欢用其他方法