注释超级详细,马蜂十分良好,代码求错误原因(玄关,真的很急)
  • 板块灌水区
  • 楼主difficultlong
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/10/18 18:41
  • 上次更新2024/10/18 20:57:49
查看原帖
注释超级详细,马蜂十分良好,代码求错误原因(玄关,真的很急)
1435692
difficultlong楼主2024/10/18 18:41

真的很急,在线等,我前三天都已经发了帖子了,但是大家不是给了一个其他思路,就是直接给我一个代码,身为蒟蒻的我虽然非常非常非常勉强的看懂了,但是我还是想知道哪里错了?(有注释)

稍稍申明一下,写这么详细(甚至里面可能有废话)不是说大家笨,是因为我笨,不知道要写到那个程度才合适,所以求大家原谅,( ̄y▽, ̄)╭

#include<bits/stdc++.h> 
using namespace std;
int front=1,rear,n;//front是队首,rear是队尾 ,n是1~n个编号的人 
int a[1000001],s[1000001],ans[1001];
//a数组记录每个人想买的票数,s数组记录每个人的编号
//ans数组记录每个人所用的时间,就是最后输出的结果 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);//读入每个人想买的票数
		s[i]=i;//记录编号 
	}
	rear=n;//初始队尾 
	while(front<=rear){//如果队列里有人就循环 
		if(a[front]){//如果此人还有票要买 
			for(int i=front;i<=rear;i++){
				ans[s[i]]++;//把没有踢出去的人每个人都加一秒 
			}
			a[front]--;//此人买了一张票,跑到队尾去了 
			a[rear++]=a[front],s[rear]=s[front];
			//同上一个注释,s数组随着人的交换也将编号交换 
			front++; //队首的人跑到队尾去了,所以队首要+1 
		}
		else{
			front++;//如果票已经买完了,就离开队列 
		}
	}
	for(int i=1;i<=n;i++){
		printf("%d ",ans[i]);//输出结果 
	}
	return 0;
} 
2024/10/18 18:41
加载中...