QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#505273#8734. 字符串重排xu_haozhe36 241ms118648kbC++143.0kb2024-08-05 00:24:222024-08-05 00:24:24

Judging History

This is the latest submission verdict.

  • [2024-08-05 00:24:24]
  • Judged
  • Verdict: 36
  • Time: 241ms
  • Memory: 118648kb
  • [2024-08-05 00:24:22]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull n,q,x_q[100005],y_q[100005],tot_w;
struct link_list{
    link_list*p_l=NULL,*p_r=NULL,*p_root;
    link_list(){p_root=this;}
    virtual void* self(){return this;}
};
link_list*find(link_list*p){return (p==p->p_root)?(p):(p->p_root=find(p->p_root));}
inline bool can_link(link_list*a,link_list*b){return ((a->p_r==b)&&(b->p_l==a))||(((a->p_r==NULL)&&(b->p_l==NULL))&&(find(a)!=find(b)));}
inline void link(link_list*a,link_list*b){(a->p_r=b),(b->p_l=a),(find(b)->p_root=find(a));}
struct node:link_list{
    node* s_[27];node**const son=s_-'a';
    static node d[],*cnt;
    int vis=-1;
    link_list l,r;
    inline void* operator new(size_t){return cnt++;}
    virtual void* self(){return this;}
};
node node::d[350005],*node::cnt=d,root;
struct str{
    static char c[],*cnt;
    char *p;
    inline void input(int i){
        (p=(cnt+=2));
        cin>>p;
        node*now=&root;
        for(;*cnt;cnt++) if(now->son[*cnt]) now=now->son[*cnt];else now=(now->son[*cnt]=new node);
        *cnt='{'; //'z'+1
        now=(now->son[*cnt]=new node);
        now->vis=i;
    }
}strs[40005];
char str::c[300005],*str::cnt=str::c;
inline bool can(str&a,str&b){
    char*pa=a.p,*pb=b.p;
    node*now=&root;
    for(;(*pa==*pb);pa++,pb++) now=now->son[*pa];
    node*now_a=now->son[*pa],*now_b=now->son[*pb];
    if(!can_link(now_a,now_b)) return false;
    for(pa++;*pa;pa++) if(!can_link(now_a->son[*pa],&now_a->r))return false;else now_a=now_a->son[*pa];
    for(pb++;*pb;pb++) if(!can_link(&now_b->l,now_b->son[*pb]))return false;else now_b=now_b->son[*pb];
    return true;
};
inline void add(str&a,str&b){
    char*pa=a.p,*pb=b.p;
    node*now=&root;
    for(;(*pa==*pb);pa++,pb++) now=now->son[*pa];
    node*now_a=now->son[*pa],*now_b=now->son[*pb];
    link(now_a,now_b);
    for(pa++;*pa;pa++) link(now_a->son[*pa],&now_a->r),now_a=now_a->son[*pa];
    for(pb++;*pb;pb++) link(&now_b->l,now_b->son[*pb]),now_b=now_b->son[*pb];
};
inline ull get_w(str&a,str&b){
    ull ans=0;
    for(char*pa=a.p,*pb=b.p;(*pa==*pb)&&(*pa!='{')&&(*pb!='{');pa++,pb++)ans++;
    return ans*ans;
}
vector<int> ans;
void dfs(node*p){
    if(p->vis>0){
        ans.push_back(p->vis);
        p=0;
        return ;
    }
    if(p->l.p_r)for(link_list*i=(p->l.p_r);(i!=NULL)&&(i!=&p->r);i=i->p_r)dfs((node*)i->self());
    for(auto j:p->s_)if((j!=NULL)&&(j->p_l==NULL))for(link_list*i=j;(i!=NULL)&&(i!=&p->r);i=i->p_r)dfs((node*)i->self());
}
stack<int> ans_q;
int cnt_ans_q;
int main(){
    cin>>n>>q;

    for(int i=1;i<=n;i++) strs[i].input(i);
    for(int i=1;i<=q;i++)cin>>x_q[i]>>y_q[i];
    for(int i=q;i>0;i--){
        if(can(strs[x_q[i]],strs[y_q[i]])){
            add(strs[x_q[i]],strs[y_q[i]]);
            ans_q.push(i);
        }
    }
    dfs(&root);
    for(int i=1;i<n;i++){
        tot_w+=get_w(strs[ans[i-1]],strs[ans[i]]);
    }
    cout<<tot_w<<'\n';
    cout<<ans[0];
    for(int i=1;i<n;i++)cout<<' '<<ans[i];
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 10
Accepted
time: 4ms
memory: 117368kb

input:

10 1
baa
bbcccccc
babcba
cdacbadd
bbb
daddbbd
aa
acddac
bbdcbadb
dbacacac
4 5

output:

15
7 8 4 5 2 9 1 3 6 10

result:

ok both question is correct

Test #2:

score: 10
Accepted
time: 3ms
memory: 116932kb

input:

50 1
gchddcc
abhhbg
fe
gdhffedaec
echeh
aacghbbaeecgeed
agbegeadhgabghhc
agdbhgbccgbgdbadahfb
cdegbdhcfdaehchdgecg
cgaffffgfhcbda
cdhhghchc
acgfbcbf
fhgaheaeehhaecfbed
dhhecfadc
ecdgaacfbfbdefh
gacgcbbef
bcdebdceegccfgbdegde
fc
eebehfdache
bhfhcfgg
fffd
hgbaccfacgbdbfagdf
aacbfgdghahghd
eagfbgf
dffg...

output:

129
23 6 2 44 12 29 26 7 8 37 42 47 41 17 40 20 46 9 11 30 50 10 38 24 39 27 15 5 19 49 31 28 18 34 3 21 36 13 43 32 25 35 14 16 45 1 4 33 48 22

result:

ok both question is correct

Test #3:

score: 2
Acceptable Answer
time: 16ms
memory: 116280kb

input:

300 500
hjjjehghbafbcaaddbgehfaiigjadaihgjgcehgacficjfcbbjcfefedgggcfdhicbhifaiiddcehjhagdgdjadf
ccjf
ibhiihgjaagdadgfjidghjjdeh
aeahgifccaebebifgccceee
haaigdfhgcbbbhdchiiagfecadgghgjhifjbgihjjchcgajjjhjifi
ebadheifbfgbhjjhghfijbbagiebhbagjiaibejchefgehbfdbcggbeiccicaebgicdibdifbcjidh
ahegdehcaefca...

output:

1159
199 288 40 130 19 186 123 10 166 209 16 2 263 90 60 100 231 24 39 64 126 125 93 34 292 293 211 56 285 279 141 146 139 163 114 206 182 97 135 169 237 161 109 88 233 253 25 171 195 192 296 51 112 226 291 22 13 271 191 61 63 79 140 243 116 76 133 157 220 194 45 245 120 154 15 266 142 287 52 81 95 ...

result:

points 0.20

Test #4:

score: 2
Acceptable Answer
time: 19ms
memory: 117624kb

input:

1000 1000
hamalibicacohakodacdhoedemdmjccnaobjbiiikldbncabjgcoabgjaelmhhaldnlhhanlombbfljnigmekgomljijboi
dhimhakijfgeciknolajblcbikagdahimhglaicgoljnbnojdlaefbidhdccfongjgfgkjdfjokikonligiaocdnaklnffledbabflfebmmbcomjljbfhocnnebkjomhlkehkidelhjhncfolmihdoclibgegkndijldbjjimcbhalogjhdcdfobhcgfahalfk...

output:

4071
191 707 287 291 35 436 521 881 537 891 639 181 441 918 564 519 77 966 132 412 178 758 375 992 7 820 574 277 712 54 855 391 617 419 635 847 236 512 407 168 511 806 151 286 805 357 309 87 949 209 16 702 985 293 505 10 781 346 975 754 466 323 225 21 85 911 797 450 738 799 834 138 529 120 742 204 9...

result:

points 0.20

Test #5:

score: 2
Acceptable Answer
time: 23ms
memory: 116348kb

input:

500 1000
ejdikhifejellkclebmhbndififlgakelclfjbkihacgcmjekekibacnhicgdggdjhmkefhflnfbnckjifdekfkfdnigcbffglflddahiimancbjkigdniflgnffnbdbgmnmkekhjcmbmafednakmldgddmdlajcijfblgcjdnfdndlnfjcchdnfhkbjgdgefccaacjlahhgfcaideebdgakhiieinkbdfhfbnifgnffannh
nlnlfiincfbmahjgedgfnnhhkkkhkifkdjlfbmhnicilhnihnb...

output:

1668
188 139 471 128 267 266 107 500 252 24 280 478 273 80 132 27 489 327 455 37 292 497 28 156 270 481 242 17 23 400 1 302 300 254 105 66 133 247 33 104 444 152 309 435 447 408 84 237 137 343 363 399 230 183 46 144 271 284 323 125 225 436 130 248 67 355 375 18 167 73 469 412 485 10 69 131 6 150 467...

result:

points 0.20

Test #6:

score: 2
Acceptable Answer
time: 191ms
memory: 117704kb

input:

20000 50000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75112434
9619 13249 19671 11102 9725 3397 19305 11985 16417 8089 425 3761 3227 17031 3370 19583 1800 447 11259 17337 363 14903 14023 10175 18526 2174 7825 2744 8141 17157 1534 15834 12102 16899 5022 7073 16340 8509 4301 9321 8150 14524 13886 5538 6561 10839 12724 11521 14547 1809 3790 456 13760 1950...

result:

points 0.20

Test #7:

score: 2
Acceptable Answer
time: 187ms
memory: 118200kb

input:

30000 80000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75144760
13746 4046 28437 259 26042 16430 10146 16212 12517 11329 29538 29802 5318 2251 8471 22223 1849 26242 20822 2685 10549 19278 19753 23110 4459 23264 9602 11476 14995 4818 28433 29625 7103 14951 16495 29111 6633 25249 28145 23299 22979 21823 3767 13238 11178 17543 29006 14931 11682 7067 2524 2...

result:

points 0.20

Test #8:

score: 2
Acceptable Answer
time: 241ms
memory: 118428kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75228205
25114 1959 31330 5715 38753 4340 4017 17366 16529 4170 39551 23682 301 29527 1469 25785 13291 12049 27498 2774 32605 26220 21602 16761 14197 22448 39722 9702 10012 37387 25809 1535 20288 25447 32717 29772 3186 32147 38843 22607 25799 27297 11000 2171 23220 16854 32350 25380 11048 23530 2746...

result:

points 0.20

Test #9:

score: 2
Acceptable Answer
time: 56ms
memory: 118648kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75227944
36258 33939 33722 38416 10683 3929 36524 24913 33385 29881 38273 36382 25059 31632 5212 20792 5809 9072 28456 27557 28046 25909 841 37304 3009 13679 29838 39301 7397 20767 25951 20197 37396 21628 14299 16967 6928 35224 3065 38943 23287 36264 3567 6626 19381 13892 37804 36105 39438 13187 181...

result:

points 0.20

Test #10:

score: 2
Acceptable Answer
time: 57ms
memory: 118428kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75228217
12906 2822 32797 9431 1923 12427 13332 11255 29648 39804 12352 3772 5915 12008 24764 29167 3601 34440 10062 39051 18240 8587 37541 38268 14197 38219 13387 679 15709 31085 21901 2699 7755 19527 39448 746 6522 21484 4719 36577 33972 25305 12095 4904 4368 17774 4304 25617 22303 27638 2346 7520...

result:

points 0.20