题目描述
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。
全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
输入样例
2
5 6 8 11 9
10 12 9
输出样例
7 9
(暴力枚举)
就是散列,一看到数据范围只有1e6,就知道用散列肯定可以
而且好写
时间复杂度
参考文献
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int ans[N],Max,Min=N;
int q,c;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;)
{
int id;
scanf("%d",&id);
ans[id]+=1;
if(id>Max)Max=id;
if(id<Min)Min=id;
if(getchar()=='\n')i++;
}
for(int i=Min;i<=Max;i++)
{
if(ans[i]==0)q=i;
if(ans[i]>1)c=i;
}
cout<<q<<" "<<c;
return 0;
}
这样会超时了…
就算数据范围不是1e-6的话,哪里会爆吗
服务器大概一秒操作1亿次,因为用的是暴力,所以数据太大比如说1e9就会超时了
大佬,为啥,这个代码调试的时候会超时,提交却ac了
同问
https://www.acwing.com/footer/faq/ 详情请看第二条o( ̄︶ ̄)o
好滴谢谢