Hash

本文详细介绍了Luogu平台上P4305不重复数字问题的解决方法,通过使用hash表进行数据存储,优化了算法效率。文章展示了完整的C++代码实现,并强调了实践对于理解算法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来其他hash与字符串hash不一样啊。。。

数组根本不用开那么大,够用就行了啊。。

实践是检验真理的唯一标准。。。

Luogu

P4305不重复数字(板子)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 
 5 using namespace std;
 6 
 7 typedef long long ll;
 8 
 9 inline ll read(){
10     ll ans = 0;char last = ' ',ch = getchar();
11     while(ch < '0'||ch > '9')last = ch,ch = getchar();
12     while('0' <= ch&&ch <= '9')ans = ans*10+ch-'0',ch = getchar(); 
13     if(last == '-')return -ans;return ans;
14 }
15 
16 const int p = 1000003;
17 
18 int Hash[p];
19 int t,x,n;
20 
21 inline void work(int x){
22     int y = x%p;
23     if(Hash[y] == x)return;
24     while(Hash[y]&&Hash[y] != x)y = (y+1)%p;
25     if(Hash[y] == x)return;
26     Hash[y] = x;
27     printf("%d ",x);
28 }
29 
30 int main(){
31     t = read();
32     while(t--){
33         n = read();
34         memset(Hash,0,sizeof(Hash));
35         while(n--){
36             x = read();
37             work(x);
38         }
39         printf("\n");
40     }
41 return 0;
42 }

 

转载于:https://www.cnblogs.com/Wangsheng5/p/11546362.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值