zoj3210
アイデア:このタイトルは良いスタックとキューの特性を反映して、スタックが最後のアウト、FIFOキューです。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int t,n;
int a[110],b[110];
bool isque,isstk;
int main()
{
freopen("in.txt","r",stdin);
cin>>t;
while(t--)
{
isque=true;
isstk=true;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
for(int i=0;i<n;++i)
cin>>b[i];
for(int i=0;i<n;++i)
{
if(a[i]!=b[i])isque=false;
if(a[i]!=b[n-i-1])isstk=false;
}
if(isque&&isstk)cout<<"both\n";
else if(isque&&!isstk)cout<<"queue\n";
else if(!isque&&isstk)cout<<"stack\n";
else cout<<"neither\n";
}
return 0;
}
uva10954
要素を保存する優先キューとハフマンアルゴリズムの水問題、、、最初のチームの各要素うち、要素が昇順//大きい<整数>であるため、その最小限です:アイデア。それはノード展開のキュー、感触と全体の検索が少し似て使用できるように、ハフマンアルゴリズムは、バイナリツリーです。
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n,x;
while(cin>>n&&n)
{
priority_queue<int,vector<int>,greater<int> >q;
for(int i=0;i<n;++i){cin>>x;q.push(x);}
int ans=0;
for(int i=0;i<n-1;++i)
{
int a=q.top();q.pop();
int b=q.top();q.pop();
ans+=(a+b);
q.push(a+b);
}
cout<<ans<<endl;
}
return 0;
}
HDU1896
プライオリティキューを使用して練習。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
struct stone
{
int p,d;
bool operator <(const stone &a)const
{
if(p==a.p)return d>a.d;
else return p>a.p;
}
};
int t,n;
int main()
{
freopen("in.txt","r",stdin);
cin>>t;
while(t--)
{
cin>>n;
stone x;
priority_queue<stone>q;
for(int i=0;i<n;++i)
{
cin>>x.p>>x.d;
q.push(x);
}
bool flag=true;
while(!q.empty())
{
x=q.top();
q.pop();
if(flag)
{
x.p+=x.d;
q.push(x);
}
flag=!flag;
}
cout<<x.p<<endl;
}
return 0;
}