7.27練習問題
3441 ワード
C題HDU 1873診察は列に並ぶ
E題HDU 1702
タイトルリンクhttp://acm.hdu.edu.cn/showproblem.php?pid=1702
解析:Outが出力した数値(スタックの先端またはキューの下端)に遭遇しました.
4 FIFO(先進先出、キュー)IN 1 IN 2 OUT 1 OUT 2 4 FILO(先進後出、スタック)IN 1 IN 2 OUT 2 OUT 2 OUT 1 5 FIFO(先進先出、キュー)IN 1 IN 2 OUT 1 OUT 2 OUT none 5 FILO(先进后出,桟)IN 1 IN 2 OUT 2 IN 3 OUT 3
F題
問題の説明
メッセージキューはwindowsシステムの基本です.各プログラムに対して、システムにはメッセージキューがあります.このプログラムが操作され、例えばマウスクリック、テキスト(text)が変更されると、システムはキューにメッセージを送信します.同時に、空でない場合、プログラムは優先度値(priority value)に基づいてキューからメッセージを絶えず取得します.なお、優先度値が低いほど優先度が高くなる.この問題では、メッセージを受信し、メッセージを送信するキューを真似します.
入力
入力項目には1つのケースしかありません.各行は、メッセージを受信し、メッセージを送信する命令である.命令が送信されている場合、メッセージ名を表す文字列には2つの整数があり、1つの表示パラメータ(parameter)、1つの表示優先度(priority)には最大60000の命令があります.1つのメッセージは2回以上発生することができ、2つのメッセージが同じ優先度を有する場合、先に受信したメッセージは実行される(IE、FIFOはいずれもそうである).ファイルが終わるまで.
しゅつりょく
各受信命令(GET)について、メッセージキューからメッセージ名とパラメータの行が出力される.キューにメッセージがない場合、「EMPTY QUEUE!」(空のキュー).受信命令に対しては出力されません.
7
IN 1 1
IN 1 2
OUT 1 2
OUT 2 empty
IN 2 1
OUT 2 3
OUT 1 1
2
IN 1 1
OUT 1 1
AC code
// , , 3 , ,
//
#include
#include
#include
using namespace std;
struct node
{
int num ,p;//p ,num
bool friend operator < (node a,node b) // ( , )
{
if(a.p!=b.p) // ,
return a.pb.num;
}
}pr;
int main()
{
int n;
int ant;
char op[4];// in out
int a,b; //a ,b
while(~scanf("%d",&n))
{
ant=0;
priority_queue q[4]; // : num,p
while(n--)
{
scanf("%s",op);
if(op[0]=='I')
{
scanf("%d %d",&a,&b);
pr.num=++ant; //ant , num
pr.p=b; // p
q[a].push(pr); // , q[1],q[2]...
}
else
{
int t;
scanf("%d",&t);
if(q[t].empty()) //q[t] , , empty
printf("EMPTY
");
else
{
pr=q[t].top(); // ,
q[t].pop(); //
printf("%d
",pr.num);
}
}
}
}
return 0;
}
E題HDU 1702
タイトルリンクhttp://acm.hdu.edu.cn/showproblem.php?pid=1702
解析:Outが出力した数値(スタックの先端またはキューの下端)に遭遇しました.
4 FIFO(先進先出、キュー)IN 1 IN 2 OUT 1 OUT 2 4 FILO(先進後出、スタック)IN 1 IN 2 OUT 2 OUT 2 OUT 1 5 FIFO(先進先出、キュー)IN 1 IN 2 OUT 1 OUT 2 OUT none 5 FILO(先进后出,桟)IN 1 IN 2 OUT 2 IN 3 OUT 3
#include
#include
#include
#include
#include//
#include//
using namespace std;
int main()
{
int T,i,a,n;
char f[5],str[1000]; //f[5] FIFO or FILO
cin>>T;
while(T--)
{
cin>>n;
cin>>f;
if(f[2]=='F') //
{
queueque; // int
for(i=0;i>str;
if(str[0]=='I')
{
cin>>a;
que.push(a); //
}
else
{
if(que.empty()) //
cout<s; // int
for(i=0;i>str;
if(str[0]=='I')
{
cin>>a;
s.push(a); //
}
else
{
if(s.empty()) //
cout<
F題
問題の説明
メッセージキューはwindowsシステムの基本です.各プログラムに対して、システムにはメッセージキューがあります.このプログラムが操作され、例えばマウスクリック、テキスト(text)が変更されると、システムはキューにメッセージを送信します.同時に、空でない場合、プログラムは優先度値(priority value)に基づいてキューからメッセージを絶えず取得します.なお、優先度値が低いほど優先度が高くなる.この問題では、メッセージを受信し、メッセージを送信するキューを真似します.
入力
入力項目には1つのケースしかありません.各行は、メッセージを受信し、メッセージを送信する命令である.命令が送信されている場合、メッセージ名を表す文字列には2つの整数があり、1つの表示パラメータ(parameter)、1つの表示優先度(priority)には最大60000の命令があります.1つのメッセージは2回以上発生することができ、2つのメッセージが同じ優先度を有する場合、先に受信したメッセージは実行される(IE、FIFOはいずれもそうである).ファイルが終わるまで.
しゅつりょく
各受信命令(GET)について、メッセージキューからメッセージ名とパラメータの行が出力される.キューにメッセージがない場合、「EMPTY QUEUE!」(空のキュー).受信命令に対しては出力されません.