熱血格鬥場和冷血格鬥場

2021-09-21 01:12:17 字數 2893 閱讀 8132

好的吧,過去很久的題目了,現在補一發。跟格鬥場有仇。每個都提交了十幾次。

先摘一下題目。

5:熱血格鬥場

描述

為了迎接08年的奧運會,讓大家更加了解各種格鬥運動,facer新開了一家熱血格鬥場。格鬥場實行會員制,但是新來的會員不需要交入會費,而只要同一名老會員打一場表演賽,證明自己的實力。

我們假設格鬥的實力可以用乙個正整數表示,成為實力值。另外,每個人都有乙個唯一的id,也是乙個正整數。為了使得比賽更好看,每乙個新隊員都會選擇與他實力最為接近的人比賽,即比賽雙方的實力值之差的絕對值越小越好,如果有兩個人的實力值與他差別相同,則他會選擇比他弱的那個(顯然,虐人必**好)。

不幸的是,facer一不小心把比賽記錄弄丟了,但是他還保留著會員的註冊記錄。現在請你幫facer恢復比賽紀錄,按照時間順序依次輸出每場比賽雙方的id。

輸入

第一行乙個數n(0 < n <=100000),表示格鬥場新來的會員數(不包括facer)。以後n行每一行兩個數,按照入會的時間給出會員的id和實力值。一開始,facer就算是會員,id為1,實力值1000000000。輸入保證兩人的實力值不同。

輸出

n行,每行兩個數,為每場比賽雙方的id,新手的id寫在前面。

樣例輸入

32 1

3 34 2

樣例輸出

2 13 2

4 2

一開始我是仿照郭神的學生資訊錄入和查詢系統那樣寫的,也就是每次迴圈一遍map找實力和它最接近的。然後發現理解錯了題目,id和入會時間無關,樣例資料太有迷惑性了。這樣就需要每次輸入都進行處理。其次就是,這樣時間會超。因此,我們不能採用又一重迴圈,而需要用stl中的lower_bound和upper_bound進行處理。

但是還是寫掛了,也許晚上腦子不太清醒。

注意點是,如果返回的lower_bound是begin,那麼說明沒有比這個會員更菜的,它自己就是begin,那麼不需要比較直接輸出upper_bound,這其實是個很弱智的結論但是我當時傻了……可能兩種思路一下沒轉換過來。

然後我之前還加了個while……emmm不知道自己當時在幹啥。

最後ac**:

#include #include #include #include #include using namespace std;

class member ;

info data;

};typedef mapmap;

int main()

--pp1;

printf("%d %d\n", a.data.id, (abs(a.force - pp1->first) > abs(a.force - pp2->first) ? pp2->second : pp1->second));

} return 0;

}

3:冷血格鬥場

總時間限制: 1000ms 記憶體限制: 65536kb

描述

為了迎接08年的奧運會,讓大家更加了解各種格鬥運動,facer新開了一家冷血格鬥場。格鬥場實行會員制,但是新來的會員不需要交入會費,而只要同一名老會員打一場表演賽,證明自己的實力。

我們假設格鬥的實力可以用乙個正整數表示,成為實力值,兩人的實力值可以相同。另外,每個人都有乙個唯一的id,也是乙個正整數。為了使得比賽更好看,每乙個新隊員都會選擇與他實力最為接近的人比賽,即比賽雙方的實力值之差的絕對值越小越好,如果有多個人的實力值與他差別相同,則他會選擇id最小的那個。

不幸的是,facer一不小心把比賽記錄弄丟了,但是他還保留著會員的註冊記錄。現在請你幫facer恢復比賽紀錄,按照時間順序依次輸出每場比賽雙方的id。

輸入

第一行乙個數n(0 < n <=100000),表示格鬥場新來的會員數(不包括facer)。以後n行每一行兩個數,按照入會的時間給出會員的id和實力值。一開始,facer就算是會員,id為1,實力值1000000000。

輸出

n行,每行兩個數,為每場比賽雙方的id,新手的id寫在前面。

樣例輸入

32 3

3 14 2

樣例輸出

2 13 2

4 2

先上ac**:

# include # include using namespace std;

typedef map mymap;

struct member ;

int main ()

else if (low == record.begin())

else if (low->first == a.force)

else

else if (a.force - low->first > up->first - a.force)

else

} if (record.find(a.force) != record.end())

else record.insert (mymap::value_type (a.force, a.id));

} return 0;

}

第一遍的時候我傻傻地保留了所有的資訊然後遍歷找到id最小的那個,然後掛了(其實感覺思路除了冗長一點之外沒什麼問題但是就是沒過)

第二遍的時候我在ac**的基礎上,把insert分散在了每個if-else那裡,把最後的if-else刪了,然後掛了。

好吧其實並不知道為什麼,從邏輯上看也沒有什麼問題……一篇不太合格的題解,放在這裡提醒自己**要簡潔,簡潔,簡潔好了。

冷血格鬥場

傳送門 冷血格鬥場 總時間限制 1000ms 記憶體限制 65536kb 描述 為了迎接08年的奧運會,讓大家更加了解各種格鬥運動,facer新開了一家冷血格鬥場。格鬥場實行會員制,但是新來的會員不需要交入會費,而只要同一名老會員打一場表演賽,證明自己的實力。我們假設格鬥的實力可以用乙個正整數表示,...

C 熱血格鬥場(STL map pair

1.題目 描述 為了迎接08年的奧運會,讓大家更加了解各種格鬥運動,facer新開了一家熱血格鬥場。格鬥場實行會員制,但是新來的會員不需要交入會費,而只要同一名老會員打一場表演賽,證明自己的實力。我們假設格鬥的實力可以用乙個正整數表示,成為實力值。另外,每個人都有乙個唯一的id,也是乙個正整數。為了...

openjudge 4 熱血格鬥場

總時間限制 1000ms 記憶體限制 65536kb 描述 為了迎接08年的奧運會,讓大家更加了解各種格鬥運動,facer新開了一家熱血格鬥場。格鬥場實行會員制,但是新來的會員不需要交入會費,而只要同一名老會員打一場表演賽,證明自己的實力。我們假設格鬥的實力可以用乙個正整數表示,成為實力值。另外,每...