QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#857474 | #8870. Human Resources | gs22059test# | 0 | 1ms | 3584kb | C++23 | 5.4kb | 2025-01-15 18:49:13 | 2025-01-15 18:49:19 |
answer
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
//#pragma GCC optimize("O3") // optimization
//#pragma GCC optimize("Ofast") // optimization
//#pragma GCC optimize("unroll-loops") // optimization
#define ordered_set tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>
#define ordered_multiset tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
#define i32 signed
#define int long long // CP
#define i64 long long
#define endl '\n'
#define elif else if
#define fi first
#define se second
#define pb push_back
#define p32 pair<i32,i32>
#define p64 pair<i64,i64>
#define f2(i,x) for((i)=0;(i)<(x);(i)++)
#define f2b(i,x) for((i)=(x)-1;(i)>=0;(i)--)
#define f3(i,f,t) for((i)=(f);(i)<(t);(i)++)
#define fall(x) (x).begin(), (x).end()
#define sort1(x) sort(fall(x))
#define rev(x) reverse(fall(x))
#define fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define fl fflush(stdout)
#define nl cout<<endl;fflush(stdout)
i64 gcd(i64 a, i64 b){if(a<b){a=a^b;b=a^b;a=a^b;} return b==0?a:gcd(b,a%b);}
i64 lcm(i64 a, i64 b){return a/gcd(a,b)*b;}
i64 expm(i64 a, i64 b, i64 m){i64 r=1;while(b){if(b&1)r=r*a%m;a=a*a%m;b>>=1;}return r%m;}
i64 expm(i64 a, i64 b){i64 r=1,m=1e9+7;while(b){if(b&1)r=r*a%m;a=a*a%m;b>>=1;}return r%m;}
i64 minv(i64 a, i64 m){return expm(a,m-2,m);}
i64 ncrm(i64 n, i64 r, i64 m){i64 i,j,k; i64 out=1; f3(i,1,n+1){out*=i;out%=m;}f3(i,1,r+1){out*=minv(i,m);out%=m;}f3(i,1,n-r+1){out*=minv(i,m);out%=m;}return out%m;}
// int n,m,k,a[300010],b[300010],c[300010];
double dist(p64 a,p64 b){
return sqrt((double)(a.fi-b.fi)*(a.fi-b.fi)+(a.se-b.se)*(a.se-b.se));
}
void probA(){
int i,j,l;
}void probC(){
int i,j,l;
}void probD(){
// int i,j,l;
// int n,q; cin>>n>>q;
// vector<int>a(n),b(n),c(n); for(int i=0;i<n;i++)cin>>a[i]>>b[i]>>c[i];
// while(q--){
//
// }
}void probF(){
int i,j,l;
}void probG(){
int i,j,l;
}
typedef long long ll;
ll n,t=0,on[610],ret[610],dep[610],par[610],in[610],vis[610];
vector<ll> g[610],ord;
map<string,ll> m2n,chk;
map<ll,string> n2m;
void assign(string s){
if(m2n[s]!=0) return;
m2n[s] = ++t;
n2m[t] = s;
//cout << s << " " << t << "\n";
}
void dfs(ll x, ll p = 0){
par[in[x]] = in[p];
for(auto i:g[x]){
dfs(i,x);
}
}
void bfs(){
queue<ll> q;
q.push(1);
ll d = 1;
while(!q.empty()){
ll sz = q.size();
for(int i=0;i<sz;i++){
ll c = q.front(); q.pop();
ord.push_back(c);
on[ord.size()] = c;
dep[ord.size()] = d;
in[c] = ord.size();
for(auto j:g[c]){
q.push(j);
}
}
d++;
}
}
void encode(){
for(int i=0;i<=605;i++){
on[i] = 0;
ret[i] = 0;
dep[i] = 0;
par[i] = 0;
in[i] = 0;
vis[i] = 0;
g[i].clear();
}
ord.clear();
m2n.clear();
n2m.clear();
chk.clear();
string nm;
vector<string> names;
while(cin >> nm){
names.push_back(nm);
}
string cr;
for(auto i:names){
if(i.back()==':'){
i.pop_back();
assign(i);
cr = i;
}
else{
assign(i);
g[m2n[cr]].push_back(m2n[i]);
}
}
n = t;
bfs();
dfs(1);
ret[1] = 1;
for(int i=2;i<=n;i++){
if(dep[i]>dep[i-1]) ret[i] = 1;
}
ret[n+1] = 1;
for(int i=n+2;i<=2*n;i++){
if(par[i-n]!=par[i-n-1]) ret[i] = 1;
}
for(int i=1;i<=n;i++){
cout << n2m[on[i]] << "\n";
//if(vis[on[i]]) assert(0);
vis[on[i]] = 1;
}
//assert(n<=600);
for(int i=1;i<=2*n;i++){
//assert(ret[i]==0||ret[i]==1);
cout << ret[i];
}
cout << "\n";
}
map<ll,string> n2m2;
vector<ll> gr[610];
vector<ll> npar[610];
ll lay[610];
void decode(){
n2m2.clear();
for(int i=0;i<=605;i++){
gr[i].clear();
npar[i].clear();
lay[i] = 0;
}
string nm;
ll t = 0;
while(cin >> nm){
n2m2[++t] = nm;
}
n = t-1;
string bin = n2m2[t];
ll l = 0;
for(int i=1;i<=n;i++){
if(bin[i-1]=='1'){
l++;
}
npar[l].push_back(i);
lay[i] = l;
}
ll id = 0;
for(int i=n+2;i<=2*n;i++){
if(lay[i-n]!=lay[i-n-1]) id = -1;
if(bin[i-n-1]=='1') id++;
gr[npar[lay[i-n]-1][id]].push_back(i-n);
}
// cout << n << "\n";
// for(int i=1;i<=l;i++){
// for(auto j:npar[i]){
// cout << n2m2[j] << " ";
// }
// cout << "\n";
// }
for(int i=1;i<=n;i++){
if(gr[i].empty()) continue;
cout << n2m2[i] << ": ";
for(auto j:gr[i]){
cout << n2m2[j] << " ";
}
cout << "\n";
}
}
/*
Janez
Josip
Zofia
Karolina
01010101
*/
void probH(){
string stmp; cin >> stmp;
if(stmp=="ENCODE"){
encode();
}
else{
decode();
}
}
void probI(){
int i,j,l;
}void probJ(){
int i,j,l;
}void probK(){
int i,j,l;
}void probL(){
int i,j,l;
}
i32 main(){
//fast;
// int tc; cin>>tc;
// while(tc--)f();
probH();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3584kb
input:
ENCODE XMWVScmwmx: vEgPOHbeWu ochzloqyLK
output:
XMWVScmwmx vEgPOHbeWu ochzloqyLK 110110
input:
DECODE XMWVScmwmx vEgPOHbeWu ochzloqyLK 110110
output:
XMWVScmwmx: vEgPOHbeWu ochzloqyLK
result:
ok correct!
Test #2:
score: 0
Wrong Answer on the first run
input:
ENCODE VUOwvLKWMm: uZfKeVXEDt HKCrRjmmHt uZfKeVXEDt: EskDVoVGeL hMxGZYvKeR HKCrRjmmHt: lGbsWnbbVU MvljqjukpU EskDVoVGeL: lRNunDdAcH mnSVypGpiN hMxGZYvKeR: iIkoDSaaZy jGlaYVeZHS lGbsWnbbVU: ZlpRVhzDFh KSlYnpyeEY MvljqjukpU: EVIpIQQgAC CCPDuKlZvd lRNunDdAcH: joEoXtahNd rzwPajApeu mnSVypGpiN: hrArKLjen...
output:
VUOwvLKWMm uZfKeVXEDt VUOwvLKWMm EskDVoVGeL VUOwvLKWMm lGbsWnbbVU VUOwvLKWMm lRNunDdAcH VUOwvLKWMm iIkoDSaaZy VUOwvLKWMm ZlpRVhzDFh VUOwvLKWMm EVIpIQQgAC VUOwvLKWMm joEoXtahNd VUOwvLKWMm hrArKLjenT VUOwvLKWMm RHKYzKhqyb VUOwvLKWMm yHAxOEPXnY VUOwvLKWMm ZQIPkyazet VUOwvLKWMm fTeqZjQojM VUOwvLKWMm FeU...
input:
output:
result:
wrong answer your output contains the name VUOwvLKWMm more than once