80玄关,RE#1#9!!!
查看原帖
80玄关,RE#1#9!!!
1645285
liuxuyan123楼主2025/7/2 17:47
#include<bits/stdc++.h>
using namespace std;
int a[54188];//绝不是数组大小问题
int maxn = -1,max_where = 10;//maxn存储最长连续0长度,max_where存储最长连续0开始下标
int main(){
	scanf("%x:%x:%x:%x:%x:%x:%x:%x",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8]);//输入
	for(int i = 1;i <= 8;i++){//寻找最长连续0
		if(a[i] == 0){
			int j = i,sum = 0,maxn2 = maxn;
			while(a[j] == 0){//往下遍历有几个0
				sum++;
				maxn2 = max(maxn2,sum);
				j++;
			}
			if(maxn2 > maxn){//将结果赋值
				max_where = i;
				maxn = maxn2;
			}
		}
	}
	/*
	自测时用的
	cout << maxn << " " << max_where << endl;
	if(maxn == 1) max_where = 10;
	cout << maxn << endl;
	*/
	if(maxn > 10){//处理特殊情况,如果全0--maxn会等于119?!
		cout << "::" << endl;
		return 0;
	}
	for(int i = 1;i <= 8;i++){//蒟蒻输出
		if(i != 1) cout << ":";
		if(max_where == i && i == 1) cout << ":";
		if(i == max_where){
			cout << ":";
			i += maxn;
			//continue;
		}
		printf("%x",a[i]);
	} 
	return 0;
}

检查了好久,极端数据也带了,就很无语。。。

2025/7/2 17:47
加载中...