UVa540 佇列 UVa136 優先佇列
阿新 • • 發佈:2019-02-07
UVa540
採用資料結構與大概流程
1.使用map<int,int>
來儲存隊伍序號與隊員的關係
2.用queue<int>
來模擬佇列的操作
不難
程式碼實現
#include<iostream>
#include<queue>
#include <map>
#include <string>
using namespace std;
int main()
{
int N, t;
int num;
int count = 1;
map<int, int> savedMember; //隊員名稱 佇列序號
queue<int> print;//用於輸出操作
while (true)
{
queue<int> q;//team queue
queue<int> p[1001];//單個佇列
//輸入
cin >> t;
if (!t)
break;
for (int i = 1; i <= t; i++)
{
cin >> N;
for (int j = 0; j < N; j++)
{
cin >> num;
savedMember.insert({ num,i });
}
}
//處理輸入指令
string order;
while (true)
{
cin >> order;
if (order[0] == 'S')
break;
else if (order[0] == 'E') //enqueue 101
{
cin>>num;
int temp = savedMember[num];
if (p[temp].empty())
q.push(temp);
p[temp].push(num);
}
else if (order[0] == 'D')
{
//cout << p[q.front()].front() << endl;
print.push(p[q.front()].front());
p[q.front()].pop();
if (p[q.front()].empty())
q.pop();
}
}
cout << "Scenario #"<<count << endl;
count++;
while (!print.empty())
{
cout << print.front()<<endl;
print.pop();
}
cout << endl;
//重新整理資料結構儲存狀態
savedMember.clear();
}
//system("pause");
return 0;
}
UVa136
採用資料結構與大概流程
1.採用STL優先佇列priority_queue來生成醜數,先將1放入佇列,每次pop頭出來,當pop1500次時即得出結果
priority_queue<type,container,function>
type是資料的型別,container為實現優先佇列的底層容器,function為元素間的比較方式,預設priority_queue<int,vector<int>>
優先順序是越小的整數優先順序越低,但這題我們要從小到大生成醜數,所以越小的整數需要優先順序越高,所以使用greater<>
,注意需要加入標頭檔案#include<functional>
程式碼實現
/*思路:從最小的1開始生成醜數
每次從優先佇列中取出最小的醜數依次*2,*3,*5
然後放入越小越優先的優先佇列中
需要比較這個新生成的醜數是否之前生成過
用set可以實現
*/
#include<iostream>
#include<set>
#include<queue>
#include<vector>
#include<functional>
using namespace std;
typedef long long ll;
const int a[3]= { 2,3,5 };
int main()
{
int count = 1;
priority_queue<ll, vector<ll>, greater<ll> > p;
set<ll> Set;
p.push(1);
Set.insert(1);
while (true)
{
ll x = p.top();
p.pop();
if (count == 1500)
{
cout <<"The 1500'th ugly number is "<<x<<"."<<endl;
break;
}
for (int i = 0; i < 3; i++)
{
ll y = x;
y = y*a[i];
if (Set.count(y) == 0)
{
Set.insert(y);
p.push(y);
//cout << y << endl;
}
}
count++;
}
system("pause");
return 0;
}