#include <iostream>
using namespace std;
struct e {
short l;
e* n;
};
int li[500001];
int k, re;
int l1[500001];
int l2[500001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cin>>k>>li[0];
e *ro = NULL, *nm;
for (int i = 1; i < k; i++) {
cin>>li[i];
for(short j=0; j<li[i]; j++) {
nm = new e;
cin>>nm->l;
nm->n = ro;
ro = nm;
}
}
// letze
re = li[k-1];
for (int i = k-1; i > 0 ; i--) {
if(i%2) {
l1[0] = li[i];
for (int j = li[i]; j > 0; j--) {
if(l1[j] < 2) {
l2[ro->l] ++;
} else {
l2[ro->l] += l1[j];
l1[0] += l1[j]-1;
}
l1[j] = 0;
nm = ro;
ro = nm -> n;
delete nm;
}
if(re < l1[0]) re = l1[0];
} else {
l2[0] = li[i];
for (int j = li[i]; j > 0; j--) {
if(l2[j] < 2) {
l1[ro->l] ++;
} else {
l1[ro->l] += l2[j];
l2[0] += l2[j]-1;
}
l2[j] = 0;
nm = ro;
ro = nm -> n;
delete nm;
}
if(re < l2[0]) re = l2[0];
}
}
//erste
l2[0] = li[0];
for (int j = li[0]; j > 0; j--) {
if(l2[j] > 1) l2[0] += l2[j] -1;
}
if(re < l2[0]) re = l2[0];
cout<<re;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <iostream> using namespace std; struct e { short l; e* n; }; int li[500001]; int k, re; int l1[500001]; int l2[500001]; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin>>k>>li[0]; e *ro = NULL, *nm; for (int i = 1; i < k; i++) { cin>>li[i]; for(short j=0; j<li[i]; j++) { nm = new e; cin>>nm->l; nm->n = ro; ro = nm; } } // letze re = li[k-1]; for (int i = k-1; i > 0 ; i--) { if(i%2) { l1[0] = li[i]; for (int j = li[i]; j > 0; j--) { if(l1[j] < 2) { l2[ro->l] ++; } else { l2[ro->l] += l1[j]; l1[0] += l1[j]-1; } l1[j] = 0; nm = ro; ro = nm -> n; delete nm; } if(re < l1[0]) re = l1[0]; } else { l2[0] = li[i]; for (int j = li[i]; j > 0; j--) { if(l2[j] < 2) { l1[ro->l] ++; } else { l1[ro->l] += l2[j]; l2[0] += l2[j]-1; } l2[j] = 0; nm = ro; ro = nm -> n; delete nm; } if(re < l2[0]) re = l2[0]; } } //erste l2[0] = li[0]; for (int j = li[0]; j > 0; j--) { if(l2[j] > 1) l2[0] += l2[j] -1; } if(re < l2[0]) re = l2[0]; cout<<re; return 0; } |
English