题目描述
读题要仔细:
- 有N行一行最多100个数
- 数字连续
方法 :
用hash表O(n)
,或者排序后扫描O(nlogn)
;
hash 13ms
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define ffor(i,s,e) for(int i=s;i<e;i++)
#define out(x) cout<<x<<" "
#define nl cout<<endl
//data
typedef long long LL;
const int N=100010;
int cnt[N];
int n;
//fun
void init(){
scanf("%d",&n);
while(n--){
int t;
while(scanf("%d",&t)!=-1) cnt[t]++;
getchar();
}
}
void getAns(){
int again=0,skip=0;
int s=0;
while(cnt[s]==0) s++;
ffor(i,s,N){
if(cnt[i]==2) again=i;
if(!cnt[i]) skip=i;
if(skip&&again) break;
}
cout<<skip<<" "<<again<<endl;
}
//Ac flow
void Ac(){
init();
getAns();
}
int main(){
Ac();
return 0;
}
排序扫描 23ms
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define ffor(i,s,e) for(int i=s;i<e;i++)
#define out(x) cout<<x<<" "
#define nl cout<<endl
//data
typedef long long LL;
const int N=100010;
int a[N];
int n;
//fun
void init(){
scanf("%d",&n);
int idx=0;
while(n--){
while(scanf("%d",&a[idx])!=-1) ++idx;
getchar();
}
n=idx;
sort(a,a+n);
// ffor(i,0,n) out(a[i]);nl;
}
void getAns(){
int q=0,c=0;
ffor(i,1,n){
if(a[i]==a[i-1]+1) continue;
if(a[i]-a[i-1]==2) q=a[i-1]+1;
if(a[i]==a[i-1]) c=a[i];
if(!q&&!c) break;
}
cout<<q<<" "<<c<<endl;
}
//Ac flow
void Ac(){
init();
getAns();
}
int main(){
// init();
Ac();
return 0;
}