我已經嘗試過了極限的方法了 還能再快一點嗎
#include<iostream>
using namespace std;
int main() {
int n;
int s = 0;
long long u=0;
long long sum = 0;
long long m;
long long a[10000] = { 0 };
long long b[10000] = { 0 };
while (cin >> n >> m) {
for (int i = 0; i < n; i++) {
for (long long j = 0; j < m; j++) {
cin >> a[j];
}
for (long long j = 0; j < m; j++) {
cin >> b[j];
}
for (long long j = 0; j < m; j++) {
if (s == 0) {
for (long long k = 0 + u; k < m; k++) {
if (a[j] == b[k]) {
sum++;
u = k+1;
break;
}
else if (a[j] < b[k]) {
break;
}
else if (k == m - 1) {
s++;
}
}
}
else {
break;
}
}
cout << sum << endl;
sum = 0;
u = 0;
s = 0;
}
}
}
原文吃掉,你要不要先理解C++加速讀取的程式碼
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
其次是題目“刻意”給定兩個“排序好”的數列是有意義的,想想看為何是排序好的數列?
提示:做法類似『MergeSort』合併時的過程。
這樣更快>_<
#include <stdio.h>
#include <iostream>
#include <deque>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
cin>>n>>m;
while(n--){
deque<long long int> a,b;
int ans=0;
for(int i=0;i<m;i++){
long long int temp;
cin>>temp;
a.push_back(temp);
}
for(int i=0;i<m;i++){
long long int temp;
cin>>temp;
b.push_back(temp);
}
while(a.size()!=0 && b.size() !=0){
if(a.front()==b.front()){
ans++;
a.pop_front();
b.pop_front();
}
else if(a.front()<b.front())
a.pop_front();
else
b.pop_front();
}
cout<<ans<<endl;
}
return 0;
}