QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#322904#4828. Four Plus Fourbachbeo20070 598ms87576kbC++233.5kb2024-02-07 22:27:352024-02-07 22:27:36

Judging History

你现在查看的是最新测评结果

  • [2024-02-07 22:27:36]
  • 评测
  • 测评结果:0
  • 用时:598ms
  • 内存:87576kb
  • [2024-02-07 22:27:35]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define mpp make_pair
#define fi first
#define se second

const int N=28558,M=3919;
int S[]={2,3,2,2,3,2,2,2,2,2,2,3,3,2,2,2,1,3,3,2,2,2,2,1,2,2};
struct Password{
    string s;
    ull mask=0;
    Password(){};
    Password(string ss):s(ss){
        vector<int> cnt(26);
        for(char c:s) cnt[c-'a']++;
        int total=0;
        for(int i=0;i<26;i++){
            mask+=((1ULL<<min(S[i],cnt[i]))-1)<<total;
            total+=S[i];
        }
    }
    int submask(Password P){
        return (mask&P.mask)==P.mask;
    }
    friend bool operator<(Password a,Password b){
        return a.s<b.s;
    }
};

int f[M][M];
Password P[N],K[M];
vector<int> V[N];
map<string,int> key,pass;
bitset<M> g[N],c[M];

void init(){
    int n;cin >> n;
    for(int i=0;i<N;i++){
        string s;cin >> s;
        P[i]=s;pass[s]=i;
    }
    int m;cin >> m;
    for(int i=0;i<M;i++){
        string s;cin >> s;
        K[i]=s;
    }
    shuffle(K,K+M,mt19937_64(9112001));
    for(int i=0;i<M;i++) key[K[i].s]=i;

    vector<pii> order(N);
    for(int i=0;i<N;i++){
        order[i].se=i;
        for(int j=0;j<M;j++){
            g[i][j]=P[i].submask(K[j]);
        }
        order[i].fi=g[i].count();
    }
    sort(order.begin(),order.end());
    for(int i=0;i<M;i++) c[i].set();
    for(auto [cnt,id]:order){
        if(cnt<3) continue;
        //cout << cnt << ' ' << id << endl;
        vector<int> res;
        function<vector<int>()> get = [&](){
            for(int x=g[id]._Find_first();x<M;x=g[id]._Find_next(x)){
                bitset<M> ny=g[id]&c[x];
                for(int y=ny._Find_next(x);y<M;y=ny._Find_next(y)){
                    bitset<M> nz=ny&c[y];
                    for(int z=nz._Find_next(y);z<M;z=nz._Find_next(z)){
                        return res={x,y,z};
                    }
                }
            }
            for(int x=g[id]._Find_first();x<M;x=g[id]._Find_next(x)){
                if(c[x][x]) return res={x,x,x};
            }
            return res={-1,-1,-1};
        };
        V[id]=get();
        int x=V[id][0],y=V[id][1],z=V[id][2];
        if(x==-1) continue;
        c[x][y]=c[x][z]=c[y][z]=c[y][x]=c[z][x]=c[z][y]=0;
        f[x][y]=f[x][z]=f[y][z]=f[y][x]=f[z][x]=f[z][y]=id+1;
    }
}
void encode(string s){
    int id=pass[s];
    //cout << id << ' ' << V[id][0] << ' ' << V[id][1] << ' ' << V[id][2] << '\n';
    assert(V[id][0]!=-1 && V[id][1]!=-1 && V[id][2]!=-1);
    cout << K[V[id][0]].s << ' ' << K[V[id][1]].s << ' ' << K[V[id][2]].s << '\n';
}
void decode(string a,string b){
    int x=key[a],y=key[b];
    assert(f[x][y]);
    cout << P[f[x][y]-1].s << '\n';
}

void solve(){
    string type;cin >> type;
    int n;cin >> n;
    vector<pair<string,string>> p(n);
    if(type=="password"){
        for(int i=0;i<n;i++) cin >> p[i].fi;
    }
    else{
        for(int i=0;i<n;i++) cin >> p[i].fi >> p[i].se;
    }
    init();
    if(type=="password"){
        for(int i=0;i<n;i++) encode(p[i].fi);
    }
    else{
        for(int i=0;i<n;i++) decode(p[i].fi,p[i].se);
    }
}

signed main(){
    //freopen("input.txt","r",stdin);
    //freopen("001.phase1.full.input","r",stdin);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    int test=1;//cin >> test;
    while(test--) solve();
}

详细

Test #1:

score: 100
Accepted
time: 571ms
memory: 84432kb

input:

password
2
password
couthier
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatises abattoir abbacies abbatial abbesses abdicate abdomens abdomina abducens abducent abducing abducted abductee abductor abelmosk aberrant abetment abettals abet...

output:

sard wrap wops
riot ouch true

input:

keys
4
sard wrap
true ouch
wops sard
wrap wops
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatises abattoir abbacies abbatial abbesses abdicate abdomens abdomina abducens abducent abducing abducted abductee abductor abelmosk aberrant abet...

output:

password
couthier
password
password

result:

ok OK

Test #2:

score: 100
Accepted
time: 569ms
memory: 84744kb

input:

password
1
quirkier
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatises abattoir abbacies abbatial abbesses abdicate abdomens abdomina abducens abducent abducing abducted abductee abductor abelmosk aberrant abetment abettals abetters abet...

output:

ruer keir kier

input:

keys
1
keir kier
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatises abattoir abbacies abbatial abbesses abdicate abdomens abdomina abducens abducent abducing abducted abductee abductor abelmosk aberrant abetment abettals abetters abettin...

output:

quirkier

result:

ok OK

Test #3:

score: 100
Accepted
time: 579ms
memory: 83800kb

input:

password
3
aardvark
aardwolf
aardvark
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatises abattoir abbacies abbatial abbesses abdicate abdomens abdomina abducens abducent abducing abducted abductee abductor abelmosk aberrant abetment abet...

output:

arak kava dark
fold frow farl
arak kava dark

input:

keys
18
kava dark
arak dark
farl fold
arak kava
arak dark
dark kava
frow farl
fold frow
dark arak
farl frow
kava dark
fold farl
arak kava
dark kava
kava arak
frow fold
dark arak
kava arak
28558
aardvark aardwolf aasvogel abacuses abalones abampere abandons abapical abasedly abashing abatable abatise...

output:

aardvark
aardvark
aardwolf
aardvark
aardvark
aardvark
aardwolf
aardwolf
aardvark
aardwolf
aardvark
aardwolf
aardvark
aardvark
aardvark
aardwolf
aardvark
aardvark

result:

ok OK

Test #4:

score: 100
Accepted
time: 570ms
memory: 87160kb

input:

password
10000
aardvark
aardwolf
aasvogel
abacuses
abalones
abampere
abandons
abapical
abasedly
abashing
abatable
abatises
abattoir
abbacies
abbatial
abbesses
abdicate
abdomens
abdomina
abducens
abducent
abducing
abducted
abductee
abductor
abelmosk
aberrant
abetment
abettals
abetters
abetting
abetto...

output:

arak kava dark
fold frow farl
egal also goes
cuss baas aces
aeon baas lobs
bear maar peer
anna nods sand
laic lipa baal
blae dyes sled
shag baas bigs
blae belt late
bise eats bait
riot bott boar
bise case cabs
lati bail bait
abbe ease bass
aide bait acta
aeon beds dams
bind mina modi
dues cane cabs
...

input:

keys
60000
egal cain
heel feel
clit efts
zags aeon
nodi cedi
foin grig
rest tubs
nisi desk
bear bird
sike riot
agio emir
nose doom
also sola
lief fila
rest kibe
tune duet
loco load
unco curn
dita dish
plat fays
cite itch
sall cels
tern ides
ores gels
cain corf
alif fair
seed reis
woof form
anta vain...

output:

cleaning
fleeches
felsitic
agonizes
coincide
frogging
bruskest
dinkiest
arabized
forkiest
armigero
endosome
falloffs
fallible
briskest
denudate
canoodle
conquers
dashiest
flypasts
bioethic
carrells
dextrins
cloggers
fricando
filarees
dressier
formwork
aviating
dogeship
arousals
celestas
buttocks
epi...

result:

ok OK

Test #5:

score: 100
Accepted
time: 598ms
memory: 87576kb

input:

password
10000
fucoidal
fuddling
fuehrers
fuellers
fuelling
fuelwood
fugacity
fuggiest
fugitive
fugleman
fuglemen
fuguists
fulcrums
fulfills
fullback
fullered
fullface
fullness
fulmined
fulmines
fulminic
fumarase
fumarate
fumarole
fumatory
fumblers
fumbling
fumeless
fumelike
fumettes
fumigant
fumiga...

output:

fold cuif coda
gild guid lung
here fuse serf
seel full sure
glen full flue
floe owed flue
tufa cuif gift
fuse gift figs
gift etui give
egal fame gaum
glen mule lung
fuss gift gits
curl slum urus
lull ills fils
club full bulk
fere full rule
alec face full
lens slue fuss
meld lief muni
mels fuse flue
...

input:

keys
60000
tens rias
riot heth
rill iron
rend oped
sept sloe
poet poke
post oped
lobe rile
drew rood
prat lota
raki vice
riot nuts
purl yelp
roti rove
pops nays
anna nota
gown owns
rias seel
nail quay
dens seel
grey eyer
oats cone
duet curt
purr sept
wilt moil
aeon mane
tyre alec
user mere
must mane...

output:

inertias
hitherto
hornbill
proponed
pollster
pokeroot
imposted
overbill
overword
platform
maverick
outrings
plumbery
inventor
pansophy
nanowatt
knowings
realiser
quaintly
linseeds
greenery
notecase
pictured
posturer
milkwort
moonbeam
rectally
presumer
nutmeats
legality
hidrosis
panderer
haunches
ove...

result:

ok OK

Test #6:

score: 0
Stage 1: Program answer Runtime Error

input:

password
8488
redounds
redpolls
redrafts
redrawer
redreams
redreamt
redrills
redriven
redrives
redroots
redrying
redshank
redshift
redshirt
redskins
redstart
redtails
redubbed
reducers
reducing
reductor
reduviid
redwares
redwings
redwoods
redyeing
reearned
reechier
reechoed
reechoes
reedbird
reedbuc...

output:

ores unde duds
oped olds oles
rest fard read
rede awee rare
mead sear rams
mead rate mart
rile side ides
rend rive vied
reis dive vees
ores dots tods
rend gyre yirr
hank sard sear
reis deft feds
rest shed dits
reis skis kirn
rest sard date
rile tads sear
rudd bred bedu
dues crud curs
rend guid iced
...

input:


output:


result: