FOJ 196. Smart Elevator

競程作業,2017 交大年度賽 Problem B:FOJ-196

題目是說,一堆人要搭電梯,但是如果有分別要去連續兩樓的人的話,可以只停一次
然後求最少需要停幾次

總之就是先把大家要去的樓排序,然後有連續的就分成一組
比如說:
1, 2, 3, 5, 10, 11, 12 就變成 {1, 2, 3}, {5}, {10, 11, 12}
然後看每一組需要幾次,所以上面的例子就是 2 + 1 + 2 = 5 次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n, tmp, ans=0, ttmp=0;
cin>>n;
bool fl[204];
for(int i=1; i<=203; i++){
fl[i] = 0;
}
for(int i=0; i<n; i++){
cin>>tmp;
fl[tmp] = 1;
}
for(int i=2; i<=203; i++){
if(fl[i]){
ttmp++;
}
else{
ans+=(ttmp+1)/2;
// cout<<"jizz"<<i<<"jizz";
ttmp=0;
}
}
cout<<ans<<"\n";
}
}