P2815 IPv6地址压缩

Archie

很简单的小模拟

我们把每四位数和一个:作为一段进行处理

小小的特判

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
string s;
int a[9];
int main(){
	cin>>s;
	int l=s.length();
	for(int i=0;i<l;i+=5){
		a[i/5+1]=2;
		if(s[i]=='0'&&s[i+1]=='0'&&s[i+2]=='0'&&s[i+3]=='0'){
			a[i/5+1]=1;
		}else
		if(s[i]=='0'){
			a[i/5+1]=2;
			for(int j=i;j<=i+3;++j){
				if(s[j]=='0'){
					a[i/5+1]++;
				}else{
					break;
				}
			}
		}
	}
	int cntt=0,cnt=0;
	int ll=0,lll=0;
	for(int i=1;i<=8;++i){
		if(a[i]==1){
			if(cnt==0){
				lll=i;
			}
			cnt++;	
		}else{
			if(cnt>cntt){
				cntt=cnt;
				ll=lll;
			}
			cnt=0;
		}
	}
	if(cnt>cntt){
				cntt=cnt;
				ll=lll;
			}
	for(int i=1;i<=8;++i){
		if(i==ll){
			cout<<":";
			if(i==1){
				cout<<":";
			}
			i+=cntt-1; 
		}else{
			if(a[i]==1){
				if(i!=8)
				cout<<"0:";
				else{
					cout<<"0";
				}
			}else
			for(int j=(i-1)*5+(a[i]==1?0:(a[i]-2));j<i*5;++j){
				cout<<s[j];
			}
		}
	}
	return 0;
} 

P2815 IPv6地址压缩

posted @ 2021-07-11 08:12  Simex  阅读(140)  评论(0编辑  收藏  举报