提供一种神秘做法(能A)
2025-02-05 08:24:35
发布于:浙江
62阅读
0回复
0点赞
考场上想出来的神秘做法,具体细节看注释。
时间复杂度:我不到啊 有没有佬能算出来
Code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll MAXN=1e5;
ll n,q,x,y;
ll nxt[MAXN],val[MAXN];
//nxt[i]表示i后面第一个空位,val[i]表示i上的数
map<ll,ll> mp;//mp[x]表示数x的位置
int main(){
cin>>n>>q;
for(ll i=1;i<n;i++) nxt[i-1]=i;//初始化nxt
nxt[n-1]=0;
while(q--){
cin>>x;
if(!mp.count(x)){//插入
y=x%n;//求H(x)
while(val[y]) y=nxt[y];//按照nxt找到第一个空位
mp[x]=y;
val[y]=x;
nxt[x%n]=(y+1)%n;//更新下一个位置
}
cout<<mp[x]<<'\n';
}
return 0;
}
全部评论 2
更新下一个位置应该是nxt[y]=nxt[(y
+1)%n]2025-02-05 来自 河南
0没试过你在口胡什么?显得牛逼?
2025-02-05 来自 浙江
0我试了,T成大份了
2025-02-05 来自 浙江
0比你还是牛逼点的
2025-02-05 来自 河南
0
卧槽 你这 的能过?
2025-02-05 来自 广东
0这份hack数据可以把你的代码卡到 :
20 20 1 2 3 4 5 6 7 8 9 10 21 22 23 24 25 26 27 28 29 30
你的while循环会运行 次。
2025-02-05 来自 广东
0抽象数据
2025-02-05 来自 浙江
0
有帮助,赞一个