一个暴力写法,复杂度应该可以卡过,但TLE了
Code:
/*
by hopelessness
*/
#include<bits/stdc++.h>
#define il inline
#define MAXN 1010
#define LL long long
#define ri register int
using namespace std;
struct Stack {
int l,len;
vector<int>a;
il void clear() {
l=len=0;
a.clear();
}
} s;
priority_queue<Stack>q;
int iii[MAXN];
int n,m;
template<typename T>il void read(T &x) {
char c=getchar();
x=0;
int f=0;
for(; !isdigit(c); c=getchar()) f|=(c=='-');
for(; isdigit(c); c=getchar()) x=((x<<3)+(x<<1)+(c^48));
x=f?-x:x;
}
template<typename T>il void write(T x) {
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x%10^48);
}
il bool operator < (const Stack &a,const Stack &b) {
ri l1=a.a.size()-1,l2=b.a.size()-1;
while(l1>-1&&l2>-1) {
if(a.a[l1]==b.a[l2]) {
l1--,l2--;
} else return a.a[l1] > b.a[l2];
}
if(l1==l2) return 1;
else if(l2>l1) return 1;
else return 0;
}
int main() {
freopen("aaa.in","r",stdin);
freopen("aaa.out","w",stdout);
read(n);
for(ri i=1; i<=n; i=-~i) {
read(s.len);
for(ri j=1; j<=s.len; j=-~j) read(iii[j]);
for(ri j=s.len; j>=1; j--) s.a.push_back(iii[j]);
q.push(s);
s.clear();
}
while(!q.empty()) {
Stack ikun=q.top();
q.pop();
write(ikun.a[ikun.a.size()-1]),putchar(' ');
ikun.a.pop_back();
if(!ikun.a.empty()) q.push(ikun);
}
return 0;
}
/*
3
1 2
1 100
1 1
-----
1 2 100
*/
/*
2
5 10 20 30 40 50
2 28 27
-----
10 20 28 27 30 40 50
*/
/*
2
3 5 1 2
3 5 1 1
-----
5 1 1 5 1 2
*/