A set of strings gives two permutations,
Find the minimum number of groups such as
A A
B C
C D
D B
AND AND
divided into 3 groups
A
B C D
E
i.e. 1 3 1
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <queue> #include <algorithm> #include <string> #include <map> using namespace std; map <string, int> maps; int main() { int T; cin >> T; while(T--) { int n; //char s[11]; cin >> n; maps.clear(); string s; for(int i = 0; i < n; i++) { cin >> s; // maps.insert(pair<string, int>(s, i)); maps[s] = i; // map maps an s to an i } int ans = 0 , idx = 0 ; for ( int i = 0 ; i < n; i++ ) { cin >> s; /*map<string, int>::iterator iter; iter = maps.find(s); int t = iter -> second;*/ int t = maps[s]; idx = max(idx, t); ans++; if(idx == i) printf("%d ", ans), ans = 0; } printf("\n"); } return 0; }