vector+string变态写法求优化
查看原帖
vector+string变态写法求优化
947881
liuyize549330楼主2024/5/16 18:03

rt

#include <bits/stdc++.h>
using namespace std;
struct re{
	int name;
	int cnt;
	string s;
};
vector<re> v;
string get(int x){
	string res="";
	while(x){
		char c=x%10+'0';
		res=c+res;
		x/=10;
	}
	return res+" ";
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	int index=0;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		if(i==1){
			v.push_back((re){x,1,get(i)});
		}else{
			if(v[index].name==x) v[index].cnt++,v[index].s+=get(i);
			else{
				index++;
				v.push_back((re){x,1,get(i)});
			}
		}
	}
//	for(int i=0;i<=index;i++){
//		cout<<v[i].name<<" "<<v[i].cnt<<" "<<v[i].s<<endl;
//	}
	while(v.size()){
		for(int i=0;i<v.size();i++){
			string str="";
			int j=0;
			for(j=0;j<v[i].s.size();j++){
				if(v[i].s[j]==' ') break;
				str+=v[i].s[j];
			}
			cout<<str<<" ";
			v[i].s=v[i].s.erase(0,j+1);
			v[i].cnt--;
		}
		cout<<endl;
		for(int i=0;i<v.size();){
			int j=i;
			if(v[j].cnt==0){
				v.erase(v.begin()+i);
				if(i==0){
					continue;
				}
				j=i;
				while(v[i-1].name==v[j].name&&j<v.size()){
					v[i-1].cnt+=v[j].cnt;
//					cout<<v[3].s<<"[[[\n";
					v[i-1].s=v[i-1].s+v[j].s;
//					cout<<v[2].s<<"[[[\n";
					j++;
				}
				for(int k=i;k<j;k++){
					v.erase(v.begin()+i);
				}	
//				cout<<v[3].s,
//				cout<<v.size()<<endl;
			}
			i++;
		}
//		for(int i=0;i<v.size();i++){
//			cout<<v[i].s;
//		}
//		cout<<endl;
//		for(int i=0;i<v.size();i++){
//			for(int j=0;j<v[i].cnt;j++)
//			cout<<v[i].name<<" ";
//		}
//		cout<<endl;
	
	}
	return 0;
} 
2024/5/16 18:03
加载中...