Pagini recente » Cod sursa (job #2880862) | Cod sursa (job #2777076) | Cod sursa (job #2776886) | Cod sursa (job #3149195) | Cod sursa (job #1104825)
#include <fstream>
#include <iostream>
#include <vector>
#include <bitset>
#include <string.h>
#include <algorithm>
#include <iomanip>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <set>
#include <map>
#include <string>
#include <queue>
#include <deque>
#include <tr1/unordered_map>
using namespace std;
using namespace tr1;
const char infile[] = "nextseq.in";
const char outfile[] = "nextseq.out";
ifstream fin(infile);
ofstream fout(outfile);
const int MAXN = 100005;
const int oo = 0x3f3f3f3f;
typedef vector<int> Graph[MAXN];
typedef vector<int> :: iterator It;
const inline int min(const int &a, const int &b) { if( a > b ) return b; return a; }
const inline int max(const int &a, const int &b) { if( a < b ) return b; return a; }
const inline void Get_min(int &a, const int b) { if( a > b ) a = b; }
const inline void Get_max(int &a, const int b) { if( a < b ) a = b; }
unordered_map <int, int> digit;
vector <int> X, A, B;
int N, M, P;
int main() {
fin >> N >> M >> P;
X.resize(N);
A.resize(M);
B.resize(P);
for(int i = 0 ; i < N ; ++ i)
fin >> X[i];
for(int i = 0 ; i < M ; ++ i)
fin >> A[i];
for(int i = 0 ; i < P ; ++ i)
fin >> B[i];
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
sort(X.begin(), X.end());
for(int i = 0 ; i < N ; ++ i)
digit[X[i]] = i + 1;
for(int i = 0 ; i < M ; ++ i)
A[i] = digit[A[i]];
A.resize(P, 0);
for(int i = 0 ; i < P ; ++ i)
B[i] = digit[B[i]];
int Ans = 0;
int pos = 0;
while(true) {
++ A[pos];
if(A[pos] == N + 1) {
A[pos] = 0;
++ pos;
continue;
}
if(pos == 0) {
if(A == B)
break;
++ Ans;
continue;
}
-- pos;
}
fout << Ans << '\n';
fin.close();
fout.close();
return 0;
}