2147 数星星

http://codevs.cn/problem/2147/

题目描述 Description

小明是一名天文爱好者,他喜欢晚上看星星。这天,他从淘宝上买下来了一个高级望远镜。他十分开心,于是他晚上去操场上看星星。

不同的星星发出不同的光,他的望远镜可以计算出观测到的星星发出的光的数值W。小明当然想尽可能地多看到星星,于是他每看到一颗星星,就要看看他之前有没有看过这颗星星。但是他看的星星太多了,他根本数不过来,于是他让你帮忙。

输入描述 Input Description

共有两行,第一行只有一个整数,为小明观测到的星星的数量n。第二行有n个整数,每两个整数由一个空格隔开,分别为小明观测到每颗星星的光的数值W[1]-W[n]。

输出描述 Output Description

只有一行,这一行共有n个数字0或1。0表示对应的星星之前没有观测到,1表示对应的星星之前已经看过了。注意:数字之间没有空格!

样例输入 Sample Input

5

1 5 5 4 1

样例输出 Sample Output
00101

数据范围及提示 Data Size & Hint

样例是往往是骗人的,本题中

30%的数据,0<n≤5000。

20%的数据,-20000≤W≤20000。

60%的数据,0<n≤50000。

100%的数据,0<n≤500000;-2000000000≤W≤2000000000。

方法一:双模哈希

取2个模数a,b,必须是质数。

设x%a=s1,x%b=s2,那么就在s1和s2之间建一条边,用链表的方式建。

所以s1可以小一点,它控制着链表中head[]或front[]的大小,但s2要大于n,不然会出现重复。

#include<iostream>
#include<cstdio>
#define f1 10007
#define f2 500009
using namespace std;
int n,cnt;
long long y;
int head[10010];
struct node
{int to,next;
}e[500001];
int hash1(long long a)
{return a%f1;
}
int hash2(long long a)
{return a%f2;
}
void add(int u,int v)
{cnt++;e[cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
}
bool find(int u,int v)
{for(int i=head[u];i;i=e[i].next)if(e[i].to==v) return true;return false;
}
long long init()
{long long x=0,f=1; char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
int main()
{n=init();for(int i=1;i<=n;i++){y=init();y+=2000000000;long long h1=hash1(y);long long h2=hash2(y);bool k=find(h1,h2);if(k) printf("1"); else{printf("0");add(h1,h2);}}
}

刚开始时第二个模数取了1009,521,都取小了。。。。。。

方法二:单模哈希

取一个大于n的质数a,对其取模。

设一个hash[],存的是原数,如果hash[x%a]还没有被用过,就把x存在hash[x%a]里,如果hash[x%a]已经被用了,那就x%a加加,直至加到hash[]没有用为止,把x存进去。所以这就需要开2*n大小的hash[]。查找的时候,从h[x%a]开始找,只要h[x%a]的下一个有数,就一直找下去,直至找到没有为止。

注意hash数组要初始化为极小值

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#define mod 500009
using namespace std;
int n,x;
int hash[mod*2];
int init()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
int main()
{n=init();memset(hash,-128,sizeof(hash));for(int i=1;i<=n;i++){int x=init();int k=abs(x)%mod;bool ok=false;while(hash[k]>=-2000000000){if(hash[k]==x)  {ok=true;break;}k++;    }hash[k]=x;if(ok) cout<<1;else cout<<0;}
}

开始hash没有初始化,初始值为0,测试数据中只要0,就WA了

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/6220055.html

codevs 2147 数星星相关推荐

  1. 题解西电OJ (Problem 1008 - 数星星)

    题目内容: Description "不要问我太阳有多高  我会告诉你我有多真  不要问我星星有几颗  我会告诉你很多很多" 一天Qinz和wudired在天上数星星,由于星星可以 ...

  2. [NowCoder] 牛牛数星星

    一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星. 牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1)).现在有n颗星星,他给每颗星星都标上坐标(xi,yi),表示这颗星星在 ...

  3. 一步一步写算法(之“数星星”)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 学过编程的朋友都知道,当初为了学习编程语言中的各种语法结构,我们要试着解决各种各样奇怪的题目. ...

  4. 用ClickHouse在GitHub上数星星

    在最大的基友交友网站GitHub上,来自世界各地的开源开发者们进行着数百万个项目.这里每天都有大量的代码文档.修复和提交BUG之类的事件信息产生. 而GitHub Archive项目,正是搜集了这些G ...

  5. 空间点过程与随机测度(一):从数星星说起

    (2010-04-13 08:15:00) 转载▼ 标签: 测度 分类: 数学 空间点过程与随机测度(一):从数星星说起 Blog的更新刚刚恢复,就得到大家的鼓励,真是让我感动,谢谢大家了. 数星星的 ...

  6. 2021年12月电子学会图形化三级编程题解析含答案:数星星

    [此题目来自2021年12月份电子学会] [青少年软件编程(图形化)等级考试试卷(三级)] 三.编程题(共3题,共30分) 36:数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓 ...

  7. 2022年9月青少年软件编程(图形化)等级考试试卷--三级--数星星

    数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓的星星灯. 1.准备工作 (1)删除小猫角色,添加"Goblin"角色,并删除Goblin角色的造型" ...

  8. URAL 1028 数星星 题解

    URAL 1028 数星星 题解 URAL 1028 题目 Astronomers often examine star maps where stars are represented by poi ...

  9. c语言数星星结构体,1469: 数星星(结构体专题)

    题目描述 一天,小明坐在院子里数星星,Gardon就出了个难题给她:Gardon在天空画出了一个矩形区域,让他输入矩形区域里有多少颗星星,仁慈的上帝还为他标出了每个星星的坐标.但小明数着数着就看花了眼 ...

  10. 数星星 ← 树状数组

    [问题描述] 题目来源:1265. 数星星 - AcWing题库 天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标. 如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k ...

最新文章

  1. java excel开元_开元表格框架extremeTable
  2. C# 程序打包成安装项目
  3. python读取写入文件_Python文件读写保存操作
  4. 【python】numpy数据load报错
  5. 2017.10.5 高速公路 思考记录
  6. 计算机技能比赛范文,计算机技能大赛策划书范文.doc
  7. pureftp在企业中的应用及配置
  8. 【花式】基于matlab花圣诞树【含Matlab源码 001期】
  9. 马克思主义原理复习资料笔记
  10. 笔记本电脑 用 VGA 线 外接显示器 频闪
  11. window 系统目录和程序 system32 syswow64 无法加载dll
  12. html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
  13. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题
  14. Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)
  15. 记Aspose.Word的使用中出现的问题
  16. Nibabel 读取 nii 文件和 nii.gz 文件
  17. mysql 频繁连接中断_记一次网络原因导致的mysql连接中断问题(druid)
  18. 嘀嗒出行IPO 会成为出行界的“拼多多”吗
  19. 手工编写html5,HTML5实现动画效果的方式汇总
  20. 安川伺服总线通讯方式_伺服控制总线方式特点

热门文章

  1. MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
  2. JS--历史搜索记录的实现
  3. 论文阅读Reasoning with Latent Structure Refinement for Document-Level Relation Extraction
  4. wifi认证_扫二维码认证登录方式详解
  5. java中类成员,java中类成员的限定词
  6. vmware虚拟服务器数据备份,备份VMware虚拟机的方法!
  7. The root link base_link has an inertia specified in the URDF, but KDL does not support a root ...
  8. unity3d 怎么生成网页版_急求unity3D动画简易版制作步骤?
  9. python基础(中)
  10. 荣耀畅玩7c能用鸿蒙吗,荣耀畅玩7C评测:人脸识别双摄 超高性价比