QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#505261#8734. 字符串重排xu_haozhe20 231ms118616kbC++143.2kb2024-08-05 00:06:082024-08-05 00:06:08

Judging History

This is the latest submission verdict.

  • [2024-08-05 00:06:08]
  • Judged
  • Verdict: 20
  • Time: 231ms
  • Memory: 118616kb
  • [2024-08-05 00:06:08]
  • 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,tot=ans.size();i<tot;i++){
        tot_w+=get_w(strs[ans[i-1]],strs[ans[i]]);
    }
    cout<<tot_w<<'\n';
    cout<<ans_q.size();
    for(;!ans_q.empty();ans_q.pop()) {
        cout<<' '<<ans_q.top();
    }
    cout<<'\n';
    for(auto i:ans){
        cout<<i<<' ';
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 2
Acceptable Answer
time: 0ms
memory: 116160kb

input:

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

output:

15
1 1
7 8 4 5 2 9 1 3 6 10 

result:

points 0.20

Test #2:

score: 2
Acceptable Answer
time: 3ms
memory: 116688kb

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
1 1
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:

points 0.20

Test #3:

score: 2
Acceptable Answer
time: 3ms
memory: 116724kb

input:

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

output:

1159
41 8 11 17 29 64 74 110 136 166 182 194 215 230 246 247 263 273 292 297 311 315 316 326 328 373 382 392 396 423 438 441 447 455 457 476 487 493 497 498 499 500
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 9...

result:

points 0.20

Test #4:

score: 2
Acceptable Answer
time: 25ms
memory: 116992kb

input:

1000 1000
hamalibicacohakodacdhoedemdmjccnaobjbiiikldbncabjgcoabgjaelmhhaldnlhhanlombbfljnigmekgomljijboi
dhimhakijfgeciknolajblcbikagdahimhglaicgoljnbnojdlaefbidhdccfongjgfgkjdfjokikonligiaocdnaklnffledbabflfebmmbcomjljbfhocnnebkjomhlkehkidelhjhncfolmihdoclibgegkndijldbjjimcbhalogjhdcdfobhcgfahalfk...

output:

4071
52 48 62 104 128 229 294 312 357 405 421 433 480 496 500 530 560 586 621 625 637 640 651 672 683 715 742 814 835 847 855 874 912 914 915 920 937 942 966 972 974 977 980 982 983 985 988 992 993 994 998 999 1000
191 707 287 291 35 436 521 881 537 891 639 181 441 918 564 519 77 966 132 412 178 758...

result:

points 0.20

Test #5:

score: 2
Acceptable Answer
time: 21ms
memory: 116624kb

input:

500 1000
ejdikhifejellkclebmhbndififlgakelclfjbkihacgcmjekekibacnhicgdggdjhmkefhflnfbnckjifdekfkfdnigcbffglflddahiimancbjkigdniflgnffnbdbgmnmkekhjcmbmafednakmldgddmdlajcijfblgcjdnfdndlnfjcchdnfhkbjgdgefccaacjlahhgfcaideebdgakhiieinkbdfhfbnifgnffannh
nlnlfiincfbmahjgedgfnnhhkkkhkifkdjlfbmhnicilhnihnb...

output:

1668
51 20 121 126 164 172 206 256 288 302 319 333 393 396 410 449 506 538 566 610 616 642 649 664 679 696 705 735 765 785 793 796 837 839 869 897 938 950 961 971 975 984 985 987 991 994 995 996 997 998 999 1000
188 139 471 128 267 266 107 500 252 24 280 478 273 80 132 27 489 327 455 37 292 497 28 1...

result:

points 0.20

Test #6:

score: 2
Acceptable Answer
time: 183ms
memory: 117540kb

input:

20000 50000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75112434
311 572 770 972 1216 1857 2858 2894 2973 3084 3268 3308 3760 3764 3977 4531 4728 4795 5010 5412 5583 5629 5682 6143 6147 6182 6892 7202 7345 7535 7696 7859 8164 8545 8706 9179 9266 9580 9610 9824 9981 10068 10189 10307 10368 10407 10969 11015 11098 11686 11818 12219 12508 12715 13199 13214 ...

result:

points 0.20

Test #7:

score: 2
Acceptable Answer
time: 188ms
memory: 118048kb

input:

30000 80000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75144760
563 15 589 699 1138 1562 1711 1883 2108 3709 3740 3790 3842 4378 4412 5059 5580 5821 6096 6378 6545 6628 7360 7489 7770 7840 8128 8197 8424 8890 8918 9028 9144 9163 9510 9807 10334 10422 10620 11124 11131 11196 11287 11511 11671 11734 11934 11967 12142 12237 12382 12654 12872 13459 13660 13...

result:

points 0.20

Test #8:

score: 2
Acceptable Answer
time: 231ms
memory: 118616kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75228205
591 56 87 153 265 372 566 585 980 1470 1826 1966 2162 2580 2649 2781 2800 2806 3373 3785 3876 4450 4797 5150 6018 6247 7874 8243 8533 9151 9357 9551 9618 9640 9679 9915 9968 10323 10585 10628 10813 11081 11126 11584 11792 12302 12483 12549 12815 12868 12946 13074 13605 13782 14627 14854 159...

result:

points 0.20

Test #9:

score: 2
Acceptable Answer
time: 63ms
memory: 118440kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75227944
608 5 484 488 774 928 1164 1353 1367 1416 1418 1482 1685 1754 1781 2053 2362 2406 2884 3852 4137 4303 4356 4361 4702 5141 5775 5913 6425 6741 6810 6841 7260 7427 8834 9187 9560 9593 9650 9892 9937 10099 10174 10927 11064 11607 11657 11843 11931 11943 12372 12548 12706 13142 13322 13528 1366...

result:

points 0.20

Test #10:

score: 2
Acceptable Answer
time: 58ms
memory: 118448kb

input:

40000 100000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

75228217
607 292 413 597 635 1306 1550 1663 1695 1916 1943 2296 2408 2440 3132 4685 5000 5724 5797 6206 6804 6869 7033 7481 7708 7778 7906 8056 8113 8278 8391 8404 8750 8801 9095 9141 9955 10061 10953 10971 11260 11633 11897 12015 12298 13924 13970 14317 14633 14683 15132 15220 15898 16042 16057 162...

result:

points 0.20