codevs 2147 数星星
2147 数星星
http://codevs.cn/problem/2147/
小明是一名天文爱好者,他喜欢晚上看星星。这天,他从淘宝上买下来了一个高级望远镜。他十分开心,于是他晚上去操场上看星星。
不同的星星发出不同的光,他的望远镜可以计算出观测到的星星发出的光的数值W。小明当然想尽可能地多看到星星,于是他每看到一颗星星,就要看看他之前有没有看过这颗星星。但是他看的星星太多了,他根本数不过来,于是他让你帮忙。
共有两行,第一行只有一个整数,为小明观测到的星星的数量n。第二行有n个整数,每两个整数由一个空格隔开,分别为小明观测到每颗星星的光的数值W[1]-W[n]。
只有一行,这一行共有n个数字0或1。0表示对应的星星之前没有观测到,1表示对应的星星之前已经看过了。注意:数字之间没有空格!
5
1 5 5 4 1
00101
样例是往往是骗人的,本题中
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 数星星相关推荐
- 题解西电OJ (Problem 1008 - 数星星)
题目内容: Description "不要问我太阳有多高 我会告诉你我有多真 不要问我星星有几颗 我会告诉你很多很多" 一天Qinz和wudired在天上数星星,由于星星可以 ...
- [NowCoder] 牛牛数星星
一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星. 牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1)).现在有n颗星星,他给每颗星星都标上坐标(xi,yi),表示这颗星星在 ...
- 一步一步写算法(之“数星星”)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 学过编程的朋友都知道,当初为了学习编程语言中的各种语法结构,我们要试着解决各种各样奇怪的题目. ...
- 用ClickHouse在GitHub上数星星
在最大的基友交友网站GitHub上,来自世界各地的开源开发者们进行着数百万个项目.这里每天都有大量的代码文档.修复和提交BUG之类的事件信息产生. 而GitHub Archive项目,正是搜集了这些G ...
- 空间点过程与随机测度(一):从数星星说起
(2010-04-13 08:15:00) 转载▼ 标签: 测度 分类: 数学 空间点过程与随机测度(一):从数星星说起 Blog的更新刚刚恢复,就得到大家的鼓励,真是让我感动,谢谢大家了. 数星星的 ...
- 2021年12月电子学会图形化三级编程题解析含答案:数星星
[此题目来自2021年12月份电子学会] [青少年软件编程(图形化)等级考试试卷(三级)] 三.编程题(共3题,共30分) 36:数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓 ...
- 2022年9月青少年软件编程(图形化)等级考试试卷--三级--数星星
数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓的星星灯. 1.准备工作 (1)删除小猫角色,添加"Goblin"角色,并删除Goblin角色的造型" ...
- URAL 1028 数星星 题解
URAL 1028 数星星 题解 URAL 1028 题目 Astronomers often examine star maps where stars are represented by poi ...
- c语言数星星结构体,1469: 数星星(结构体专题)
题目描述 一天,小明坐在院子里数星星,Gardon就出了个难题给她:Gardon在天空画出了一个矩形区域,让他输入矩形区域里有多少颗星星,仁慈的上帝还为他标出了每个星星的坐标.但小明数着数着就看花了眼 ...
- 数星星 ← 树状数组
[问题描述] 题目来源:1265. 数星星 - AcWing题库 天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标. 如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k ...
最新文章
- java excel开元_开元表格框架extremeTable
- C# 程序打包成安装项目
- python读取写入文件_Python文件读写保存操作
- 【python】numpy数据load报错
- 2017.10.5 高速公路 思考记录
- 计算机技能比赛范文,计算机技能大赛策划书范文.doc
- pureftp在企业中的应用及配置
- 【花式】基于matlab花圣诞树【含Matlab源码 001期】
- 马克思主义原理复习资料笔记
- 笔记本电脑 用 VGA 线 外接显示器 频闪
- window 系统目录和程序 system32 syswow64 无法加载dll
- html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题
- Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)
- 记Aspose.Word的使用中出现的问题
- Nibabel 读取 nii 文件和 nii.gz 文件
- mysql 频繁连接中断_记一次网络原因导致的mysql连接中断问题(druid)
- 嘀嗒出行IPO 会成为出行界的“拼多多”吗
- 手工编写html5,HTML5实现动画效果的方式汇总
- 安川伺服总线通讯方式_伺服控制总线方式特点
热门文章
- MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
- JS--历史搜索记录的实现
- 论文阅读Reasoning with Latent Structure Refinement for Document-Level Relation Extraction
- wifi认证_扫二维码认证登录方式详解
- java中类成员,java中类成员的限定词
- vmware虚拟服务器数据备份,备份VMware虚拟机的方法!
- The root link base_link has an inertia specified in the URDF, but KDL does not support a root ...
- unity3d 怎么生成网页版_急求unity3D动画简易版制作步骤?
- python基础(中)
- 荣耀畅玩7c能用鸿蒙吗,荣耀畅玩7C评测:人脸识别双摄 超高性价比