2012-09-24 51 views
2

這幾天我一直在瘋狂試圖找出這個座位分配問題,並想知道如果有人可以幫助我。C++電影座位

指示說:

假設一組N個學生一起到達類(或電影),並且恰好n個座位可供consectutively爲1行。考慮到對座位的偏好,你需要確定學生可以坐下來滿足偏好的數量。

輸入

輸入會唯一形式的鍵盤。輸入將包含多個測試用例。每個測試用例都以兩個整數0 < n和0≤m開始,其中n是要就座的學生人數,m是偏好數。爲簡單起見,假設學生從0到n - 1編號。然後是m行,每行描述一個偏好,其中一行由三個整數a,b和c組成,滿足0≤a< b < n和0 < | C | < n。如果c是正數,那麼青少年a和b想要最多坐在c個座位上。如果c是負數,那麼a和b想要至少坐在-c座位上。輸入的端部通過由N = M的線路發出信號= 0。

輸出

每個測試情況下的輸出是包含的可能的就座裝置的數量爲滿足該組的單個線所有的輸入約束。

採樣輸入

0 1 -2

樣本輸出

#include <vector> 
#include <algorithm> 
#include <string> 
#include <iostream> 
#include <iterator> 

using namespace std; 


struct Preference 
{ 
int a; 
int b;      //Struct with three preferences 
int c; 
}; 


int main() 
{ 
int a,b,c,students,numpref; 
int count = 0; 

vector<Preference> prefs;    //Vector with struct to store preferences 
Preference case1; 

cout<<"Enter number of students and preferences: "; 
cin>>students>>numpref;   //Total Number of students and preferences are entered 



for(int i = 0; i<=numpref; i++) 
{ 
cin>>case1.a>>case1.b>>case1.c; 
prefs.push_back(case1);     //Stores preferences in vector 
cout<<endl; 
} 

vector<int> v2(a);    //Second vector created to store list of students 

sort(v2.begin(), v2.end()); 

while(next_permutation(v2.begin(), v2.end())) 
            //Finds all permutations of student seating 
{ 


} 


system("PAUSE"); 
return 0; 
} 

我知道這不完全的,但我堅持主要是想弄清楚如何喜好的每一行比較正確的排列,然後計算結果。我考慮了將用戶放入的向量中的每個元素的位置(例如:在示例中爲0,1),並檢查每個發現的排列是否有0和1之間至少有2個位置。但那不會起作用。

+0

你爲什麼說這是行不通的?太慢了? –

+0

那麼每次我嘗試用if語句來比較向量中兩個變量之間的距離時,結果都不會正確。 –

+0

您是否創建了一個函數,可以給您兩個特定學生之間的距離? –

回答

1

您認爲可以工作的算法,但速度很慢。我在你的不完整代碼中發現了一些錯誤。

for(int i = 0; i<=numpref; i++) 

我想這應該是

for(int i = 0; i<numpref; i++) 
+0

感謝您的提示。有關如何比較偏好與排列的建議?我遇到的問題是試圖計算出每次用戶的所有偏好與排列相匹配,然後將其作爲結果存儲在計數器中。 –

+0

@Stephen Frankie如果效率不是您的考慮因素,那麼對於每個排列,您可以計算一個矩陣,其中a(i,j)= distance(i,j),然後您可以使用此矩陣枚舉每個首選項。我認爲這很容易編寫代碼。 –

+0

嗯..感謝您的建議。我會嘗試制定一些代碼。我是一個新的程序員,所以這些概念對我來說都很新穎。 –