求助,40分代码,用数组模拟队列,样例全过,两端指针lef在s,rig在1
查看原帖
求助,40分代码,用数组模拟队列,样例全过,两端指针lef在s,rig在1
1024974
fornisun楼主2024/3/9 17:13
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+10;
int n, s, cow[maxn], lef, rig, seq;
string order;

void check();
void circle();

int main()
{
	//freopen("test.txt","w",stdout); 
	
	scanf("%d",&s);
	getline(cin,order);
	
	lef = s,rig = 1;
	for (int i=1;i<=s;i++)
	{
		getline(cin,order);
		///cout<<"   order="<<order<<endl;
		
		if (order[0] == 'A')
		{
			seq++;
			if (order[2] == 'L')
				cow[lef--] = seq;
			if (order[2] == 'R')
				cow[rig++] = seq;
			circle();
		}
		if (order[0] == 'D')
		{
			if (order[2] == 'L')
				lef += order[4] - '0';
			if (order[2] == 'R')
				rig -= order[4] - '0';
			circle();
		}
		
		//check();
	}
	
	if (lef > rig)
	{
		for (int i=lef + 1;i<=s;i++)
		{
			printf("%d\n",cow[i]);
			
		}
		for (int i=1;i<=rig - 1;i++)
		{
			printf("%d\n",cow[i]);
			
		}
	}
	else{
		for (int i=lef + 1;i<=rig - 1;i++)
			printf("%d\n",cow[i]);
	}
	printf("\n");
	
	
	
	return 0;
}
void check()
{
	printf("cow[]=\n");
	for (int i=s-5;i<=s;i++) printf("%d ",cow[i]);
	for (int i=1;i<=5;i++) printf("%d ",cow[i]);
	printf("lef = %d   rig = %d\n\n",lef,rig);
}
void circle()
{
	if (lef <= 0) lef = s + lef;
	if (rig <= 0) rig = s + rig;
	if (lef > s) lef = lef - s;
	if (rig > s) rig = rig - s;
}
2024/3/9 17:13
加载中...