1. 程式人生 > >ccf練習- 學生排隊(c++)題解

ccf練習- 學生排隊(c++)題解

#include <iostream>
using namespace std;  
//

const int N = 1000;
struct Node {
    int index;         
    int pos;        
} stu[N];

int main(int argc, char** argv) {
	int n,m,p,q;
	int temp1[N],temp2[N];
	cin>>n;
	int arr[n];
	for(int i=1;i<=n;i++){
		stu[i].index=i;
		stu[i].pos=i;
	}
	cin>>m;
	for(int i=0;i<m;i++){
		cin>>p>>q;
		if(q>0){
			for(int i=stu[p].pos+1;i<=stu[p].pos+q;i++){
				for(int j=1;j<=n;j++)
					if(stu[j].pos==i) temp1[i]=j;
			}
			for(int i=stu[p].pos+1;i<=stu[p].pos+q;i++){
				int k=temp1[i];
				stu[k].pos--;
			}
			stu[p].pos += q;
		}else{ 
			for(int i=stu[p].pos+q;i<stu[p].pos;i++){
				for(int j=1;j<=n;j++)
					if(stu[j].pos==i) {
//						stu[j].pos++;
						temp1[i]=j;
//						cout<<"stu["<<j<<"]:"<<stu[j].pos<<endl; 
					};
			}
			for(int i=stu[p].pos+q;i<stu[p].pos;i++){
				int k=temp1[i];
				stu[k].pos++;
			}
			stu[p].pos +=q;
    	}
    }
	
	for(int i=1;i<=n;i++)
	   for(int j=1;j<=n;j++){
	   	if(stu[j].pos==i) cout<<j<<" ";
	   } 
	return 0;
}