题目:
设 A = {a1, a2, … , an}, B = {b1, b2, … , bm} 是非负整数集合,其中m = O(logn)。
设计算法计算集合 C = (A − B) ∪ (B − A)。
输入输入文件包含2行。
第1行的第一个数为n,表示A集合的大小,接下来跟有A集合中的包含的n个非负整数。
第2行的第一个数为m,表示B集合的大小,接下来跟有B集合中的包含的m个非负整数。
两个集合中的数按照从小到大的顺序给出,n <= 106输出输出文件包含1行,表示计算出的C集合中所包含的整数。
请将这些整数按照从小到大的顺序排序。
我的代码:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int main(){
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int m,n;
int temp;
cin >> n;
vector<int>a(n);
for(int i = 0; i < n; i++){
cin >> a[i];
}
cin >> m;
int cur = 0;
for(int i = 0; i < m; i++){
cin >> temp;
while(cur < n && temp > a[cur]){
cout << a[cur++] << " ";
}
if(a[cur] == temp){
cur++;
}
else{
cout << temp << " ";
}
}
for(; cur < n; cur++){
cout << a[cur] << " ";
}
cout << endl;
return 0;
}
永远都是超时,AC不了啊
设 A = {a1, a2, … , an}, B = {b1, b2, … , bm} 是非负整数集合,其中m = O(logn)。
设计算法计算集合 C = (A − B) ∪ (B − A)。
输入输入文件包含2行。
第1行的第一个数为n,表示A集合的大小,接下来跟有A集合中的包含的n个非负整数。
第2行的第一个数为m,表示B集合的大小,接下来跟有B集合中的包含的m个非负整数。
两个集合中的数按照从小到大的顺序给出,n <= 106输出输出文件包含1行,表示计算出的C集合中所包含的整数。
请将这些整数按照从小到大的顺序排序。
我的代码:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int main(){
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int m,n;
int temp;
cin >> n;
vector<int>a(n);
for(int i = 0; i < n; i++){
cin >> a[i];
}
cin >> m;
int cur = 0;
for(int i = 0; i < m; i++){
cin >> temp;
while(cur < n && temp > a[cur]){
cout << a[cur++] << " ";
}
if(a[cur] == temp){
cur++;
}
else{
cout << temp << " ";
}
}
for(; cur < n; cur++){
cout << a[cur] << " ";
}
cout << endl;
return 0;
}
永远都是超时,AC不了啊