#include <stdio.h>
// sort的定義
#include <algorithm>
// vector的定義
#include <vector>
// deque的定義
#include <deque>
// 同樣,引入std命名空間
using namespace std;
// 用數組儲存
int friends[1000];
// 用vector儲存
vector<int> vtFriends;
// 用deque儲存
deque<int> dqFriends;
int main()
...{
int T;
scanf("%d", &T);
int iCase;
for (iCase = 1; iCase <= T; iCase++)
...{
// 每次要將vector和deque請空
vtFriends.clear();
dqFriends.clear();
printf("Scenario #%d: ", iCase);
int n, f, tn;
scanf("%d%d", &n, &f);
// 由於後面要找三次,所以先把n的值儲存下來
tn = n;
int i;
for (i = 0; i < f; i++)
...{
// 儲存到數組
scanf("%d", &friends[i]);
// 儲存到vector
vtFriends.push_back(friends[i]);
// 儲存到deque
dqFriends.push_back(friends[i]);
}
// 排序,如果不給第三個參數,預設是按升序排
// sort實現的是快速排序,它是不穩定排序,
// 需要穩定排序時,用stable_sort,用法與sort完全一樣
// 對數組進行排序
sort(friends, friends + f);
// 對vector進行排序
sort(vtFriends.begin(), vtFriends.end());
// 對deque進行排序
sort(dqFriends.begin(), dqFriends.end());
// 在數組裡尋找
for (i = f - 1; i >= 0; i--)
...{
n -= friends[i];
if (n <= 0)
break;
}
// 在vector裡尋找
// 先恢複n的值
n = tn;
for (i = f - 1; i >= 0; i--)
...{
n -= vtFriends.at(i);
if (n <= 0)
break;
}
// 在deque裡尋找
// 先恢複n的值
n = tn;
for (i = f - 1; i >= 0; i--)
...{
// deque的at方法效率比vector低,
// 因為deque的元素在記憶體上不完全是連續的
n -= dqFriends.at(i);
if (n <= 0)
break;
}
if (i < 0)
puts("impossible");
else
printf("%d ", f - i);
puts("");
}
return 0;
}
使用的我們學院一個牛人寫的一篇東西哈,這裡介紹vector,deque和sort的用法,這些都是STL的內容,給你一個網站吧,http://www.stlchina.org/;
不過一般好像都不提倡一開始就在程式中使用STL,那些演算法都自己寫寫最好,然後等學會了再用也會理解得更深入的!