제출 #197673

#제출 시각아이디문제언어결과실행 시간메모리
197673NordwayZamjena (COCI18_zamjena)C++14
70 / 70
171 ms16344 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define x first #define y second #define pb push_back #define mp make_pair #define all(v) v.begin(),v.end() #define sz(v) (int)v.size() #define up_b upper_bound #define low_b lower_bound #define nl '\n' using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set; const int N=5e4+11; const int M=1e3+11; const int inf=1e9; const ll INF=1e18; const ll mod=1e9+9; const double EPS=1e-9; int n; string a[N],b[N]; int num[3*N]; int used[3*N]; vector<int>g[3*N]; bool check(string s){ for(int i=0;i<sz(s);i++){ if(isalpha(s[i]))return 0; } return 1; } void dfs(int v,string s){ used[v]=1; if(num[v]){ if(v>n){ if(b[v-n]!=s){ cout<<"NE"; exit(0); } } if(v<=n&&a[v]!=s){ cout<<"NE"; exit(0); } } for(int i=0;i<sz(g[v]);i++){ int to=g[v][i]; if(used[to])continue; dfs(to,s); } } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; num[i]=check(a[i]); } for(int i=1;i<=n;i++){ cin>>b[i]; num[i+n]=check(b[i]); } for(int i=1;i<=n;i++){ if(num[i]==1&&num[i+n]==1){ if(a[i]!=b[i]){ cout<<"NE"; return 0; } } else{ g[i].pb(i+n); g[i+n].pb(i); } } vector<pair<string,int>>v; for(int i=1;i<=n;i++){ v.pb(mp(a[i],i)); v.pb(mp(b[i],i+n)); } sort(all(v)); int cur=n+n; for(int i=0;i<sz(v);i++){ int j=i; while(j<sz(v)-1&&v[j].x==v[j+1].x)j++; if(j>i){ cur++; for(int k=i;k<=j;k++){ g[cur].pb(v[k].y); g[v[k].y].pb(cur); } } i=j; } for(int i=1;i<=n;i++){ if(num[i]){ dfs(i,a[i]); } if(num[i+n]){ dfs(i+n,b[i]); } } cout<<"DA"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...