QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#505271 | #8734. 字符串重排 | xu_haozhe | 20 | 233ms | 118672kb | C++14 | 3.1kb | 2024-08-05 00:21:50 | 2024-08-05 00:21:50 |
Judging History
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_q.size();
for(;!ans_q.empty();ans_q.pop()) {
cout<<' '<<ans_q.top();
}
return 0;
}
詳細信息
Pretests
Final Tests
Test #1:
score: 2
Acceptable Answer
time: 8ms
memory: 115656kb
input:
10 1 baa bbcccccc babcba cdacbadd bbb daddbbd aa acddac bbdcbadb dbacacac 4 5
output:
15 1 1
result:
points 0.20
Test #2:
score: 2
Acceptable Answer
time: 3ms
memory: 117096kb
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
result:
points 0.20
Test #3:
score: 2
Acceptable Answer
time: 12ms
memory: 116568kb
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
result:
points 0.20
Test #4:
score: 2
Acceptable Answer
time: 24ms
memory: 117064kb
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
result:
points 0.20
Test #5:
score: 2
Acceptable Answer
time: 22ms
memory: 117188kb
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
result:
points 0.20
Test #6:
score: 2
Acceptable Answer
time: 176ms
memory: 117816kb
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: 178ms
memory: 118292kb
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: 233ms
memory: 118672kb
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: 53ms
memory: 118648kb
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: 50ms
memory: 118320kb
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