2010年4月4日 星期日

Problem 10763 Foreign Exchange,交換學生

一開始我想說用陣列紀錄它的國家是否有想交換的學生以及這學生想交換到哪一個國家,然而我怕國家的編號會大於陣列的索引,但實驗後證明國家編號不會大於 300,所以採用陣列紀錄的方法。

首先宣告一個 300 個索引的陣列, int data[300] = {0};,而這陣列只是方便紀錄,真正要判斷交換學生使否均衡,則須宣告兩變數來紀錄,int ConfirmCount, NotConfirmCount;, ConfirmCount 變數是紀錄交換學生的總數,NotConfirmCount 變數是紀錄國家欲收學生之缺額。當兩數計算後皆為 0,則交換學生才算均衡。C 語言程式碼如下:
ConfirmCount = 0, NotConfirmCount = 0;
while (n --)
{
scanf("%d %d", &i, &j);
if (data[i] >= 0)
data[i] ++, ConfirmCount ++;
else data[i] ++, NotConfirmCount --;
if (data[j] <= 0)
data[j] --, NotConfirmCount ++;
else data[j] --, ConfirmCount --;
}

if (ConfirmCount == 0 && NotConfirmCount == 0)
printf("YES\n");
else printf("NO\n");

By David.K

p10763題目連結
回ACM題庫目錄
回首頁

沒有留言: