其他分享
首页 > 其他分享> > 1110 区块反转 测试点分析 测试点1、2、4

1110 区块反转 测试点分析 测试点1、2、4

作者:互联网

易错点

测试点1、4:结点数量n和区块结点数k满足(n-1)%k==0的情况

测试点2:k为1的情况 如输入为:“00100 2 1 00100 1 12309 12309 2 -1”

代码

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int a[100001];
string nxt[100001];
string p[100001];
int main()
{
	string faddr;
	int n,k;
	string address;
	int data;
	string nex;
	string f;
	int cnt;
	string fir,las;
	string final;
	string tmpf;
	cin>>faddr>>n>>k;
	for(int i=0;i<n;i++){
		cin>>address>>data>>nex;
		a[stoi(address)]=data;
		nxt[stoi(address)]=nex;
		if(nex=="-1"){
			final=address;
		}
	}
	f=faddr;
	p[stoi(f)]="-1";
	while(nxt[stoi(f)]!="-1"){
		p[stoi(nxt[stoi(f)])]=f;
		f=nxt[stoi(f)];
	}
	
//	while(p[stoi(final)]!="-1"){
//		cout<<final<<" "<<a[stoi(final)]<<" "<<p[stoi(final)]<<endl;
//		final=p[stoi(final)];
//	}
//	cout<<final<<" "<<a[stoi(final)]<<" "<<p[stoi(final)]<<endl;
	if(k!=1){
		f=faddr;
		cnt=1;
		while(nxt[stoi(f)]!="-1"){
			if(cnt==1){
				fir=f;	
				cnt++;
				f=nxt[stoi(f)];
			}
			else if(cnt==k){
				las=f;
				p[stoi(nxt[stoi(f)])]=fir;
				f=nxt[stoi(f)];
				nxt[(stoi(las))]=p[stoi(fir)];
				cnt=0;
				cnt++;
			}
			else{
				cnt++;
				f=nxt[stoi(f)];
			}
		}
		if(cnt!=1){
			las=f;
			nxt[(stoi(las))]=p[stoi(fir)];
		}
		else if(cnt==1){
			fir=f;
			las=f;
			nxt[(stoi(las))]=p[stoi(fir)];
		}	
	}
	else{
		// 00100 2 1 00100 1 12309 12309 2 -1
		f=faddr;
		while(nxt[stoi(f)]!="-1"){
			tmpf=f;
			f=nxt[stoi(f)];
			nxt[stoi(tmpf)]=p[stoi(tmpf)];
		}	
		nxt[stoi(f)]=p[stoi(f)];
		fir=f;
	}
	
	f=fir;
	while(nxt[stoi(f)]!="-1"){
		cout<<f<<" "<<a[(stoi(f))]<<" "<<nxt[stoi(f)]<<endl;
		f=nxt[stoi(f)];
	}
	cout<<f<<" "<<a[(stoi(f))]<<" "<<nxt[stoi(f)]<<endl;
	
	return 0;
}

标签:nxt,string,测试点,int,1110,stoi,address,区块
来源: https://www.cnblogs.com/wodeblog1982/p/16483653.html