zoukankan      html  css  js  c++  java
  • HDU5071

    题目描述

    略。。。

    题解

    现场赛的时候真是脑残。。。用splay去写。。写完发现调试不出来。。。然后才发现数据范围才5000。。。不过那时候只有40分钟了。。用数组模拟了速度敲了一发。写完只剩10几分钟了。。。最终也没调试出来。。赛后想了想发现此题用deque真是巨好写。。

    代码:

    bye是个坑。必须得在队列里并且是说过话的。。

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<queue>
      5 #include<algorithm>
      6 using namespace std;
      7 typedef long long LL;
      8 #define maxn 1111111
      9 #define MOD 1000000007
     10 deque< pair<int,LL> >arr;
     11 int tp;
     12 void Add(int x)
     13 {
     14     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
     15         if(it->first==x)
     16         {
     17             puts("same priority.");
     18             return;
     19         }
     20     arr.push_back(make_pair(x,0));
     21     puts("success.");
     22 }
     23 void Close(int x)
     24 {
     25     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
     26         if(it->first==x)
     27         {
     28             if(tp==x) tp=0;
     29             printf("close %d with %I64d.
    ",x,it->second);
     30             arr.erase(it);
     31             return;
     32         }
     33     puts("invalid priority.");
     34 }
     35 void Chat(int x)
     36 {
     37     if(arr.size()==0)
     38     {
     39         puts("empty.");
     40         return;
     41     }
     42     if(tp)
     43     {
     44         for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
     45             if(it->first==tp)
     46             {
     47                 it->second+=x;
     48                 break;
     49             }
     50     }
     51     else arr.front().second+=x;
     52     puts("success.");
     53 }
     54 void Rotate(int x)
     55 {
     56     if(arr.size()<x||x<1)
     57     {
     58         puts("out of range.");
     59         return;
     60     }
     61     int cnt=1;
     62     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it,++cnt)
     63         if(cnt==x)
     64         {
     65             pair<int,LL>pa=*it;
     66             arr.erase(it);
     67             arr.push_front(pa);
     68             break;
     69         }
     70     puts("success.");
     71 }
     72 void Prior()
     73 {
     74     if(arr.size()==0)
     75     {
     76         puts("empty.");
     77         return;
     78     }
     79     deque< pair<int,LL> >::iterator mx=arr.begin();
     80     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
     81         if(mx->first<it->first) mx=it;
     82     pair<int,LL>pa=*mx;
     83     arr.erase(mx);
     84     arr.push_front(pa);
     85     puts("success.");
     86 }
     87 void Choose(int x)
     88 {
     89     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
     90         if(it->first==x)
     91         {
     92             pair<int,LL>pa=*it;
     93             arr.erase(it);
     94             arr.push_front(pa);
     95             puts("success.");
     96             return;
     97         }
     98     puts("invalid priority.");
     99 }
    100 void Top(int x)
    101 {
    102     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
    103         if(it->first==x)
    104         {
    105             tp=x;
    106             puts("success.");
    107             return;
    108         }
    109     puts("invalid priority.");
    110 }
    111 void Untop()
    112 {
    113     if(!tp)
    114     {
    115         puts("no such person.");
    116         return;
    117     }
    118     tp=0;
    119     puts("success.");
    120 }
    121 void Bye()
    122 {
    123     deque< pair<int,LL> >::iterator fuck=arr.end();
    124     if(tp)
    125     {
    126         for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
    127             if(it->first==tp&&it->second)
    128             {
    129                 printf("Bye %d: %I64d
    ",tp,it->second);
    130                 arr.erase(it);
    131                 break;
    132             }
    133     }
    134     for(deque< pair<int,LL> >::iterator it=arr.begin(); it!=arr.end(); ++it)
    135     if(it->second)
    136     {
    137         printf("Bye %d: %I64d
    ",it->first,it->second);
    138     }
    139 }
    140 int main()
    141 {
    142     int T;
    143     scanf("%d",&T);
    144     while(T--)
    145     {
    146         int n;
    147         scanf("%d",&n);
    148         arr.clear();
    149         tp=0;
    150         for(int i=1; i<=n; i++)
    151         {
    152             printf("Operation #%d: ",i);
    153             char op[10];
    154             int x;
    155             scanf("%s",op);
    156             if(op[0]=='A')
    157             {
    158                 scanf("%d",&x);
    159                 Add(x);
    160             }
    161             else if(op[1]=='l')
    162             {
    163                 scanf("%d",&x);
    164                 Close(x);
    165             }
    166             else if(op[2]=='a')
    167             {
    168                 scanf("%d",&x);
    169                 Chat(x);
    170             }
    171             else if(op[0]=='R')
    172             {
    173                 scanf("%d",&x);
    174                 Rotate(x);
    175             }
    176             else if(op[0]=='P') Prior();
    177             else if(op[0]=='C')
    178             {
    179                 scanf("%d",&x);
    180                 Choose(x);
    181             }
    182             else if(op[0]=='T')
    183             {
    184                 scanf("%d",&x);
    185                 Top(x);
    186             }
    187             else Untop();
    188         }
    189         Bye();
    190     }
    191     return 0;
    192 }
    View Code
  • 相关阅读:
    常用的系统操作需要的响应时间
    几种RAID技术比较
    iptables详解
    mount命令详解
    解决CSocket高数据传输问题
    VC++ ComBox下拉菜单看不到值
    封装MySQL C API 基本操作
    MySQL存储过程和存储函数
    MYSQL 常用命令
    VS2005连接MySQL C API
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/4078747.html
Copyright © 2011-2022 走看看