7.27練習問題

3441 ワード

C題HDU 1873診察は列に並ぶ
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!」(空のキュー).受信命令に対しては出力されません.