模拟实现散列表运行超时

问题遇到的现象和发生背景

运行超时
题目链接如下:
https://www.acwing.com/problem/content/description/842/

问题相关代码
#include
#include
using namespace std;
const int N=20003,null=0x3f3f3f3f;
int n;//定义操作数n
char op[2];
int h[N];

void insert(int x)
{
    int k=(x%N+N)%N;
    //筛除冲突且被占的位置
    while(h[k]!=null&&h[k]!=x)
    {
        k++;
        if(k==N)k=0;
    }
    h[k]=x;
    return ;
}
bool find(int x)
{
    int k=(x%N+N)%N;
    while(h[k]!=null&&h[k]!=x)
    {
        k++;
        if(k==N)k=0;
    }
    if(h[k]==x)return true;
    return false;
}
int main()
{
    cin>>n;//读入操作次数
    int x;
    memset(h,0x3f,sizeof h);//初始化h数组
    while(n--)
    {
        scanf("%s%d",op,&x);
        if(*op=='I')insert(x);
        else {
            if(find(x))puts("Yes");
            else puts("No");
        }
    }
    return 0;
}

运行结果及报错内容

小部分数据通过

好吧知道了N=200003应该是