This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define all(pr1) pr1.begin(),pr1.end()
#define alr(pr1) pr1.rbegin(),pr1.rend()
#define CEIL(pr1, pr2) (pr1 + pr2 - 1) / pr2
#define IOS std::ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define RT(s) return cout<<s,0
#define sz(s) (long long)(s.size())
const long long N = 2e5 + 9, M = 1e9 + 9, MOD = 1e9 + 7, OO = 0x3f3f3f3f, MAX = 2147483647, LOO = 0x3f3f3f3f3f3f3f3f;
bool isNum(char c)
{
if (c >= '0' && c <= '9')
return 1;
return 0;
}
int32_t main()
{
IOS;
int n;
cin >> n;
vector<string> a(n), b(n);
multiset <pair<string, string>> st;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++)
cin >> b[i];
bool can = 1;
map<string, int> mp;
map<string, vector<string>> mp2;
for (int i = 0; i < n && can; i++)
{
bool aa = isNum(a[i][0]);
bool bb = isNum(b[i][0]);
if (aa && bb)
{
if (a[i] != b[i])
can = 0;
}
else if (aa && !bb)
st.insert({ a[i],b[i] });
else if (!aa && bb)
st.insert({ b[i],a[i] });
else
{
mp2[a[i]].push_back(b[i]);
mp2[b[i]].push_back(a[i]);
}
}
while (can && sz(st))
{
pair<string, string> xx = *(st.begin());
st.erase(st.begin());
int x = stoi(xx.first);
string y = xx.second;
if (mp.find(y) != mp.end() && mp[y] != x)
can = 0;
else
{
mp[y] = x;
for (int i = sz(mp2[y]) - 1; i >= 0; i--)
{
string z = to_string(x);
st.insert({ z, mp2[y].back() });
mp2[y].pop_back();
}
}
}
cout << (can ? "DA\n" : "NE\n");
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |