201609-2 -火車購票- CCF
阿新 • • 發佈:2018-11-14
題目:http://118.190.20.162/view.page?gpid=T46
解題思路:簡單模擬,就一排一排的硬模擬。
程式碼:
#include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespace std; int row[22]; int rem[9]; int n,g; int main(){ for(int i=1;i<=20;i++){ row[i]=5; } cin>>n; int y=1; for(int i=0;i<n;i++){ cin>>g; memset(rem,0,sizeof(rem)); int j=y; int r=1; while(row[j]<g&&j<=20)j++;///是否有連續空座? if(j<=20){///有連續空位 int k,p=5-row[j]; row[j]-=g; for(k=1;k<=g;k++){ rem[r++]=(j-1)*5+p+k; } } else{ j=y;//這一步最開始竟然忘了寫了 while(g){ if(row[j]>0){///未填滿 int k,p=5-row[j]; int q=row[j]; g-=row[j]; row[j]=0; for(k=1;k<=q;k++){ rem[r++]=(j-1)*5+p+k; } } else{///已填滿 y=j;//j記錄已填滿的排數 j++; } } } for(int c=1;c<=5;c++){ if(rem[c]){ cout<<rem[c]; if(rem[c+1]){ cout<<" "; } } } if(i!=n-1) cout<<endl; } return 0; }