很神奇,考虑的甚至比同机房的周全,而且样例全过,不知道错哪里。
#include<bits/stdc++.h>
using namespace std;
int st, ed, cnt;
struct node {
char c[5];
int st, len;
bool nl;
} a[8];
int main() {
a[0].nl = 1;
for (int i = 1; i <= 8; i++) {
for (int j = 1; j <= 4; j++)
scanf("%c:", &a[i].c[j]);
a[i].st = 1;
}
for (int i = 1; i <= 8; i++) {
bool f = 1;
for (int j = 1; j <= 4; j++)
if (a[i].c[j] == '0' && f) a[i].st++;
else f = 0;
if (a[i].st == 5) a[i].nl = 1, a[i].st--;
if (a[i].nl) a[i].len = 1;
if (a[i].nl && a[i-1].nl) a[i].len = max(a[i].len, a[i-1].len+1);
if (a[i].len > cnt) cnt = a[i].len, ed = i;
}
for (int i = ed; i >= 1; i--)
if (!a[i-1].len) {
st = i;
break;
}
if (ed == 1) st = 1;
if (st == 1) printf(":");
for (int i = 1; i <= 8; i++) {
if (st == ed) {if(i == st) printf(":");}
else if (i == ed-1) printf(":");
if (i >= st && i <= ed) continue;
for (int j = a[i].st; j <= 4; j++)
printf("%c", a[i].c[j]);
i == 8 ? : printf(":");
}
return 0;
}