1.这道题的数据没法下载
2.我通过了所有的样例最后得了70分,三个WA求hack
#include <iostream>
#include <string>
using namespace std;
string IPv6;
string p[8];
string suo(string s)
{
if(s=="0000") return "0";
if(s[0]!='0') return s;
string ss="";
if(s[0]=='0'&&s[1]!='0') return ss=ss+s[1]+s[2]+s[3];
if(s[1]=='0'&&s[2]!='0') return ss=ss+s[2]+s[3];
if(s[2]=='0'&&s[3]!='0') return ss=ss+s[3];
}
int main()
{
cin>>IPv6;
for(int i=0;i<39;i++)
{
if(IPv6[i]==':') continue;
p[(i+1)/5]+=IPv6[i];
}
for(int i=0;i<8;i++) p[i]=suo(p[i]);
int nowf=-1,nowl=0,lonf=-1,lonl=0;
for(int i=0;i<8;i++)
{
if(p[i]!="0")
{
if(lonl<nowl)
{
lonl=nowl;
lonf=nowf;
}
nowl=0;
nowf=-1;
}
else
{
if(nowf==-1) nowf=i;
nowl++;
}
}
if(lonl<nowl)
{
lonl=nowl;
lonf=nowf;
}
int l=lonf,r=lonf+lonl-1;
if(!lonl)
{
cout<<IPv6;
return 0;
}
for(int i=0;i<8;i++)
{
if(i<l||i>r) cout<<p[i];
if(i==7) continue;
if(i==l-1||i==l)
{
cout<<"::";
i=r;
continue;
}
cout<<":";
}
return 0;
}