Submission details
Task:Swapping letters
Sender:Wu xiaobo
Submission time:2020-09-20 02:20:42 +0300
Language:C++ (C++11)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.17 sdetails
#5ACCEPTED0.12 sdetails
#6--details
#7ACCEPTED0.64 sdetails
#8ACCEPTED0.12 sdetails
#9ACCEPTED0.04 sdetails
#10ACCEPTED0.04 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:41:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < x.size(); i++) {
                     ~~^~~~~~~~~~
input/code.cpp:60:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i2 >= x_letters[b].size() or i1 >= x_letters[a].size()){
                ~~~^~~~~~~~~~~~~~~~~~~~~~
input/code.cpp:60:48: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i2 >= x_letters[b].size() or i1 >= x_letters[a].size()){
                                             ~~~^~~~~~~~~~~~~~~~~~~~~~

Code

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;


void merge(vector<int>& nums1, vector<int>& nums2) {
    int m = nums1.size();
    int n = nums2.size();

    int last = m + n - 1;
    while (n) {
        if (m == 0) {
            nums1[last--] = nums2[--n];
        } else if (nums2[n-1] > nums1[m-1]) {
            nums1[last--] = nums2[--n];
        } else {
            nums1[last--] = nums1[--m];
        }
    }
}


int main() {
    int n;
    cin >> n;
    char forbids[n][2];
    for (int i = 0; i < n; i++)
        cin >> forbids[i][0] >> forbids[i][1];
    string x, y;
    cin >> x >> y;
    if(x.length() != y.length()){
        cout << "NO";
        return 0;
    }
    map<char, vector<int> > x_letters;
    map<char, vector<int> > y_letters;

    for (int i = 0; i < x.size(); i++) {
        x_letters[x[i]].push_back(i);
        y_letters[y[i]].push_back(i);
    }

    for (int i = 0; i < n; i++) {
        char a, b;
        a = forbids[i][0];
        b = forbids[i][1];
//        vector<int> x_ind_a, x_ind_b, y_ind_a, y_ind_b;
        int m = 0;
        m += x_letters[a].size();
        m += x_letters[b].size();
        int i1, i2, i3, i4;
        i1 = 0;
        i2 = 0;
        i3 = 0;
        i4 = 0;
        for(int p=0; p < m; p++){
            if(i2 >= x_letters[b].size() or i1 >= x_letters[a].size()){
                break;
            }
            if(x_letters[a][i1] < x_letters[b][i2] and y_letters[a][i3] < y_letters[b][i4]){
                i1 += 1;
                i3 += 1;
            }
            else if(x_letters[a][i1] > x_letters[b][i2] and y_letters[a][i3] > y_letters[b][i4]){
                i2 += 1;
                i4 += 1;
            }
            else{
                cout<<"NO";
                return 0;
            }
        }
    }
    cout << "YES";
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
5
a b
b c
c d
d e
...

correct output
YES

user output
YES

Test 2

Verdict: ACCEPTED

input
2
a b
b c
acbbaca
cabbaac

correct output
YES

user output
YES

Test 3

Verdict: ACCEPTED

input
2
a b
b c
acbbaca
baccaab

correct output
NO

user output
NO

Test 4

Verdict: ACCEPTED

input
10
d c
e b
f y
h q
...

correct output
YES

user output
YES

Test 5

Verdict: ACCEPTED

input
10
a i
a l
d a
g h
...

correct output
NO

user output
NO

Test 6

Verdict:

input
325
a b
a e
a f
a g
...

correct output
YES

user output
(empty)

Test 7

Verdict: ACCEPTED

input
325
a c
a e
a g
a h
...

correct output
NO

user output
NO

Test 8

Verdict: ACCEPTED

input
0
dlkinfmdyjaofxbccwhhbxzartqwdr...

correct output
YES

user output
YES

Test 9

Verdict: ACCEPTED

input
0
bxisdrdpgcsnnvhnfgimivzqpqjwqc...

correct output
NO

user output
NO

Test 10

Verdict: ACCEPTED

input
0
mrwduerojcguvxzmbomfsainvqehsl...

correct output
NO

user output
NO