• 几道STL题目(FJUT


    • 这个OJ一直在做,一些专题题目都很好,从易至难,阶梯上升,很适合像我这样的蒟蒻 =7=
    • 这篇是关于其中一个专题训练的题解思路及代码   http://120.78.128.11/Contest.jsp?cid=486
    • 所有题面我就不贴了,各位自行去看,链接在上一行 =7=

    一、求众数(Map标记+Set)

    • 其实数组维护也可以做,但既然是STL训练,就用STL的东西了
    • 用map标记数据和出现的次数,然后转入结构体存入map中
    • 为什么不直接用set<map<T,T> >的形式 是因为map只能对关键字排序,而我们需要排次数,所以存入set中先转存入结构体
    • 然后没啥坑点,结构体自己构造一个排序就行了,如何构造请看另一篇博文
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 struct node{
    45     int sum,x;
    46     bool operator <(const node &b)const{
    47         if(sum == b.sum)
    48             return x < b.x;
    49         else
    50             return sum > b.sum;
    51     }
    52 };
    53 
    54 map<int,int >q;
    55 set<node>p;
    56 set<node>::iterator it;
    57 
    58 int main(){
    59     ios_base::sync_with_stdio(false);
    60     cout.tie(0);
    61     cin.tie(0);
    62     int n,t,x,d,e;
    63     while(~scanf("%d",&n)){
    64         q.clear();
    65         p.clear();
    66         while(n--){
    67             scanf("%d",&t);
    68             if(t == 1){
    69                 scanf("%d",&x);
    70                 q[x]++;
    71                 p.insert((node){q[x],x});
    72             }
    73             else{
    74                 if(!p.empty()){
    75                     e = p.begin()->sum;
    76                     int flag = 0;
    77                     for(it = p.begin(); it != p.end(); it++){
    78                         if(it->sum == e){
    79                             if(flag++)
    80                                 printf(" ");
    81                             printf("%d",it->x);
    82                         }
    83                         else
    84                             break;
    85                     }
    86                     puts("");
    87                 }
    88             }
    89 
    90         }
    91     }
    92 }
    View Code

    二、营业额统计(Set)

    • 这个题用Set中的lower_bound函数直接找就行了 =7=
    • 没啥讲的 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 set<int>q;
    45 
    46 int main(){
    47     ios_base::sync_with_stdio(false);
    48     cout.tie(0);
    49     cin.tie(0);
    50     int n;
    51     while(~scanf("%d",&n)){
    52         q.clear();
    53         int x;
    54         ll sum = 0;
    55         while(n--){
    56             scanf("%d",&x);
    57             if(q.empty()){
    58                 sum += x;
    59                 q.insert(x);
    60             }
    61             else{
    62                 set<int>::iterator l = --q.lower_bound(x);
    63                 set<int>::iterator r = q.lower_bound(x);
    64                 int temp = min(abs(*l - x),abs(*r - x));
    65                 sum += temp;
    66                 q.insert(x);
    67             }
    68         }
    69         printf("%lld
    ",sum);
    70     }
    71 
    72     return 0;
    73 }
    View Code

    三、宠物收养所(Set)

    • 和上一题类似,Set::Lower_bound直接搞就行了
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 set<int>q;
    45 
    46 int main(){
    47     ios_base::sync_with_stdio(false);
    48     cout.tie(0);
    49     cin.tie(0);
    50     int n;
    51     while(~scanf("%d",&n)){
    52         q.clear();
    53         int t,x;
    54         ll sum = 0;
    55         while(n--){
    56             scanf("%d%d",&t,&x);
    57             if(t == 0){
    58                 q.insert(x);
    59             }
    60             else{
    61                 if(q.empty()){
    62                     continue;
    63                 }
    64                 set<int>::iterator l = --q.lower_bound(x);
    65                 set<int>::iterator r = q.lower_bound(x);
    66                 if(r == q.begin()){
    67                     sum += abs(*r - x);
    68                     q.erase(r);
    69                 }
    70                 else{
    71                     int ll = abs(*l - x);
    72                     int rr = abs(*r - x);
    73                     if(ll == rr){
    74                         sum += ll;
    75                         q.erase(l);
    76                     }
    77                     else if(ll < rr){
    78                         sum += ll;
    79                         q.erase(l);
    80                     }
    81                     else if(ll > rr){
    82                         sum += rr;
    83                         q.erase(r);
    84                     }
    85                 }
    86             }
    87         }
    88         printf("%lld
    ",sum);
    89     }
    90 
    91     return 0;
    92 }
    View Code

    四、第二集 你说,你的女朋友就是你的电脑(Stack)

    • 无力吐槽标题以及题面 =7=
    • Stack模拟一下就行
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 char s[2000010];
    45 
    46 int main(){
    47     ios_base::sync_with_stdio(false);
    48     cout.tie(0);
    49     cin.tie(0);
    50     while(~scanf("%s",s)){
    51         stack<char>q;
    52         char ch;
    53         int flag = 1;
    54         int len = strlen(s);
    55         for(int i = 0; s[i] != ''; i++){
    56             ch = s[i];
    57             if(ch == '(' || ch == '{' || ch == '[' || ch == '<'){
    58                 q.push(ch);
    59             }
    60             else{
    61                 char tp;
    62                 if(s[i] == '}')
    63                     tp = '{';
    64                 else if(s[i] == '>')
    65                     tp = '<';
    66                 else if(s[i] == ']')
    67                     tp = '[';
    68                 else if(s[i] == ')')
    69                     tp = '(';
    70                 if(!q.empty()){
    71                     if(q.top() == tp)
    72                         q.pop();
    73                 }
    74                 else{
    75                     flag = 0;
    76                     break;
    77                 }
    78             }
    79         }
    80         if(flag){
    81             if(q.empty())
    82                 puts("YES");
    83             else
    84                 puts("NO");
    85         }
    86         else{
    87             puts("NO");
    88         }
    89     }
    90 
    91     return 0;
    92 }
    View Code

    五、Jokes(Map+Queue维护)

    • 用一个队列存记得的笑话,然后 map标记一下就行了
    • 不过注意的是她能记m天包括当前天,所以存以前的笑话应该是m-1天(开始没注意 =7=)
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 int main(){
    45     ios_base::sync_with_stdio(false);
    46     cout.tie(0);
    47     cin.tie(0);
    48     int n,m;
    49     while(~scanf("%d%d",&n,&m)){
    50         int tot = 0,flag = 0;
    51         map<int,int>q;
    52         queue<int>vis;
    53         if(n <= m){
    54             flag = 1;
    55         }
    56         for(int i = 0; i < n; i++){
    57             int temp;
    58             scanf("%d",&temp);
    59             if(q[temp] == 0)
    60                 q[temp] = 1,tot++;
    61             if(vis.size() == m-1){
    62                 q[vis.front()] = 0;
    63                 vis.pop();
    64             }
    65             vis.push(temp);
    66         }
    67         printf("%d",tot);
    68     }
    69 
    70     return 0;
    71 }
    View Code

    六、Log大侠(线段树+离线)

    • 据说好像是某年蓝桥杯的题 然后暴力能水60%数据 =7=
    • 离线加线段树 不过建树的时候把1标记为2 输出时候减去标记数量 不然1会影响更新操作
    • 至于线段树不会离线不懂得话 =7= 后面慢慢讲 这里只讲题解思路
    • 代码:
      1 #include <iostream>
      2 #include <string>
      3 #include <cstdio>
      4 #include <cstdlib>
      5 #include <sstream>
      6 #include <iomanip>
      7 #include <map>
      8 #include <stack>
      9 #include <deque>
     10 #include <queue>
     11 #include <vector>
     12 #include <set>
     13 #include <list>
     14 #include <cstring>
     15 #include <cctype>
     16 #include <algorithm>
     17 #include <iterator>
     18 #include <cmath>
     19 #include <bitset>
     20 #include <ctime>
     21 #include <fstream>
     22 #include <limits.h>
     23 #include <numeric>
     24 
     25 using namespace std;
     26 
     27 #define F first
     28 #define S second
     29 #define mian main
     30 #define ture true
     31 
     32 #define MAXN 1000000+5
     33 #define MOD 1000000007
     34 #define PI (acos(-1.0))
     35 #define EPS 1e-6
     36 #define MMT(s) memset(s, 0, sizeof s)
     37 typedef unsigned long long ull;
     38 typedef long long ll;
     39 typedef double db;
     40 typedef long double ldb;
     41 typedef stringstream sstm;
     42 const int INF = 0x3f3f3f3f;
     43 
     44 const int maxn = 100010;
     45 int num[100010];
     46 ll tree[maxn<<2];
     47 int n,m;
     48 int l,r;
     49 int cnt;
     50 
     51 void build(int x,int l, int r){
     52     if (l == r){
     53         cin >> tree[x];
     54         if (tree[x] == 1){
     55             cnt++;
     56             tree[x] = 2;
     57         }
     58         return;
     59     }
     60 
     61     int mid = (l+r)/2;
     62     build((x<<1),l,mid);
     63     build((x<<1)+1,mid+1,r);
     64     tree[x] = tree[(x<<1)]+tree[(x<<1)+1];
     65 }
     66 
     67 void update(int x,int l,int r,int L,int R){
     68     if (tree[x] == (r-l+1)<<1){
     69         return ;
     70     }
     71     if (l == r){
     72         tree[x] = num[tree[x]];
     73         return;
     74     }
     75 
     76     int mid = (l+r)/2;
     77     if (R <= mid)
     78         update((x<<1),l,mid,L,R);
     79     else if (L > mid)
     80         update((x<<1)+1,mid+1,r,L,R);
     81     else{
     82         update((x<<1),l,mid,L,mid);
     83         update((x<<1)+1,mid+1,r,mid+1,R);
     84     }
     85     tree[x] = tree[(x<<1)]+tree[(x<<1)+1];
     86 }
     87 
     88 int main(){
     89     ios_base::sync_with_stdio(false);
     90     cout.tie(0);
     91     cin.tie(0);
     92     for(int i = 1; i <= maxn; i++)
     93         num[i] = (int)(log2(i) + 1);
     94     cin >> n >> m;
     95 
     96     build(1,1,n);
     97     while(m--){
     98         cin >> l >> r;
     99         update(1,1,n,l,r);
    100         cout << tree[1] - cnt << endl;
    101     }
    102     return 0;
    103 }
    View Code

    七、哈利什么什么什么的

    • 这题没做
    • 题目太长了 写了一下 WA了  后面再想吧 =7=

    八、LRU算法实现(Map维护+Set)

    • 这题没做出来
    • 我的思路是两个map标记数据 和 是否存在(因为数据可能为0),然后Set记录是否最近走过,提交上去无情wa了两发
    • 我看了大佬的代码,基本都是用三个Map标记。溜了溜了
    • 这里就贴一下大佬的AC代码吧:
     1 /**
     2 rid: 195317
     3 user: sandychn
     4 time: 2018-07-21 10:40:16
     5 result: Accepted 
     6 */
     7 
     8 #include <bits/stdc++.h>
     9 using namespace std;
    10 typedef long long ll;
    11 
    12 struct LRU {
    13     map <int, ll> key_value;
    14     map <int, int> time_key;
    15     map <int, int> key_time;
    16     LRU() {
    17         clear();
    18     }
    19     ~LRU() {
    20     }
    21     void clear() {
    22         key_value.clear();
    23         time_key.clear();
    24         key_time.clear();
    25     }
    26     void insert(int time, int key, ll value) {
    27         key_value[key] = value;
    28         time_key[time] = key;
    29         key_time[key] = time;
    30     }
    31     ll get(int key) {
    32         auto it = key_value.find(key);
    33         if(it == key_value.end())
    34             return -1;
    35         return it->second;
    36     }
    37     void remove(int key) {
    38         auto it_key_time = key_time.find(key);
    39         if(it_key_time == key_time.end())
    40             return;
    41         int time = it_key_time->second;
    42         key_time.erase(it_key_time);
    43         key_value.erase(key);
    44         time_key.erase(time);
    45     }
    46     void visit(int key, int time) {
    47         auto it_key_time = key_time.find(key);
    48         if(it_key_time == key_time.end())
    49             return;
    50         int old_time = it_key_time->second;
    51         key_time[key] = time;
    52         time_key.erase(old_time);
    53         time_key[time] = key;
    54     }
    55     void pop() {
    56         if(time_key.empty())
    57             return;
    58         int key = time_key.begin()->second;
    59 //        printf("Element %d has been erased.
    ", key);
    60         key_time.erase(key);
    61         key_value.erase(key);
    62         time_key.erase(time_key.begin());
    63     }
    64 };
    65 LRU lru;
    66 int main() {
    67 //    freopen("../in.txt", "r", stdin);
    68     int n, time, k;
    69     ll v;
    70     char opt[10];
    71     while(scanf("%d", &n) != EOF) {
    72         lru.clear();
    73         for(time = 1; time <= n; ++time) {
    74             scanf("%s", opt);
    75             if(opt[0] == 'i') {
    76                 scanf("%d %lld", &k, &v);
    77                 lru.insert(time, k, v);
    78             } else if(opt[0] == 'p') {
    79                 lru.pop();
    80             } else {
    81                 scanf("%d", &k);
    82                 if(opt[0] == 'g')
    83                     printf("%lld
    ", lru.get(k));
    84                 else if(opt[0] == 'v')
    85                     lru.visit(k, time);
    86                 else if(opt[0] == 'r')
    87                     lru.remove(k);
    88             }
    89         }
    90     }
    91     return 0;
    92 }
    View Code

    九、Registration system(Map)

    • 进去一看英文题 不想做 ,
    • 看了下样例觉得不难,等下做了再写
    • 做完回来了map模拟就好 直接看代码吧 =7=
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 int main(){
    45     ios_base::sync_with_stdio(false);
    46     cout.tie(0);
    47     cin.tie(0);
    48     int n;
    49     cin>>n;
    50     map<string,int>q;
    51     while(n--){
    52         string s;
    53         cin>>s;
    54         if(q[s] == 0){
    55             q[s]++;
    56             cout << "OK" << endl;
    57         }
    58         else{
    59             cout << s << q[s] << endl;
    60             q[s]++;
    61         }
    62     }
    63 
    64     return 0;
    65 }
    View Code

    十、统计难题(Map)

    • 我是直接用map把输入的每个字符串的前缀全部记录
    • 然后直接输出就行
    • 如果是每次都去匹配的话应该会TLE
    • 值得注意的是这个题的输入格式,中间仅仅换了一行(各位还没见过这种格式输入可以自己先想想)
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 map<string,int>cot;
    45 
    46 int main(){
    47     ios_base::sync_with_stdio(false);
    48     cout.tie(0);
    49     cin.tie(0);
    50 
    51     char temp[20];
    52     string s;
    53     while(1){
    54         getline(cin,s);
    55         if(!s[0])
    56             break;
    57         MMT(temp);
    58         for(int i = 0; i < s.size(); i++){
    59             temp[i] = s[i];
    60             cot[temp]++;
    61         }
    62     }
    63     while(cin>>s){
    64         printf("%d
    ",cot[s]);
    65     }
    66 
    67     return 0;
    68 }
    View Code

    十一、看病要排队(Priority_Queue)

    • 又是排队又是STL 肯定就是优先队列啦
    • 三个优先队列分别记录三个医生的病人,然后模拟即可
    • 代码:
      1 #include <iostream>
      2 #include <string>
      3 #include <cstdio>
      4 #include <cstdlib>
      5 #include <sstream>
      6 #include <iomanip>
      7 #include <map>
      8 #include <stack>
      9 #include <deque>
     10 #include <queue>
     11 #include <vector>
     12 #include <set>
     13 #include <list>
     14 #include <cstring>
     15 #include <cctype>
     16 #include <algorithm>
     17 #include <iterator>
     18 #include <cmath>
     19 #include <bitset>
     20 #include <ctime>
     21 #include <fstream>
     22 #include <limits.h>
     23 #include <numeric>
     24 
     25 using namespace std;
     26 
     27 #define F first
     28 #define S second
     29 #define mian main
     30 #define ture true
     31 
     32 #define MAXN 1000000+5
     33 #define MOD 1000000007
     34 #define PI (acos(-1.0))
     35 #define EPS 1e-6
     36 #define MMT(s) memset(s, 0, sizeof s)
     37 typedef unsigned long long ull;
     38 typedef long long ll;
     39 typedef double db;
     40 typedef long double ldb;
     41 typedef stringstream sstm;
     42 const int INF = 0x3f3f3f3f;
     43 
     44 struct node{
     45     int id;
     46     int cnt;
     47     node(int id,int cnt):id(id),cnt(cnt){}
     48     friend operator < (node a,node b){
     49         if(a.cnt == b.cnt){
     50             return a.id > b.id;
     51         }
     52         return a.cnt < b.cnt;
     53     }
     54 };
     55 
     56 int main(){
     57     ios_base::sync_with_stdio(false);
     58     cout.tie(0);
     59     cin.tie(0);
     60     int n;
     61     while(cin>>n){
     62         priority_queue<node>j,k,l;
     63         int tot = 1;
     64         for(int i = 1; i <= n; i++){
     65             string s;
     66             int a,b;
     67             cin>>s;
     68             if(s[0] == 'I'){
     69                 cin>>a>>b;
     70                 node tp(tot++,b);
     71                 if(a == 1){
     72                     j.push(tp);
     73                 }
     74                 else if(a == 2){
     75                     k.push(tp);
     76                 }
     77                 else if(a == 3){
     78                     l.push(tp);
     79                 }
     80             }
     81             else if(s[0] == 'O'){
     82                 cin>>a;
     83                 if(a == 1){
     84                     if(j.empty()){
     85                         cout<<"EMPTY"<<endl;
     86                     }
     87                     else{
     88                         node tp = j.top();
     89                         j.pop();
     90                         cout<<tp.id<<endl;
     91                     }
     92                 }
     93                 else if(a == 2){
     94                     if(k.empty()){
     95                         cout<<"EMPTY"<<endl;
     96                     }
     97                     else{
     98                         node tp = k.top();
     99                         k.pop();
    100                         cout<<tp.id<<endl;
    101                     }
    102                 }
    103                 else if(a == 3){
    104                     if(l.empty()){
    105                         cout<<"EMPTY"<<endl;
    106                     }
    107                     else{
    108                         node tp = l.top();
    109                         l.pop();
    110                         cout<<tp.id<<endl;
    111                     }
    112                 }
    113 
    114             }
    115         }
    116     }
    117     return 0;
    118 }
    View Code

    十二、Stone(Priority_Queue)

    • 同第九题,英文题,现在不想做,等下再做
    • 做完回来了,优先队列模拟就行了
    • 自己写个排序按照位置排序,注意位置相同时候,得优先能抛最远的
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 struct node{
    45     int pos,num;
    46     bool operator < (const node b)const{
    47         if(pos != b.pos)
    48             return b.pos < pos;
    49         return b.num < num;
    50     }
    51 };
    52 
    53 int main(){
    54     ios_base::sync_with_stdio(false);
    55     cout.tie(0);
    56     cin.tie(0);
    57     int t,n;
    58     node tp;
    59     cin>>t;
    60     while(t--){
    61         cin>>n;
    62         priority_queue<node>q;
    63         for(int i = 0; i < n; i++){
    64              cin>>tp.pos>>tp.num;
    65              q.push(tp);
    66         }
    67         int flag = 1;
    68         while(!q.empty()){
    69             tp = q.top();
    70             q.pop();
    71             if(flag){
    72                 flag = 0;
    73                 tp.pos += tp.num;
    74                 q.push(tp);
    75             }
    76             else
    77                 flag = 1;
    78         }
    79         cout << tp.pos << endl;;
    80     }
    81     return 0;
    82 }
    View Code

    十三、离散化(Set+Vector)

    • 字符串离散化,数据处理的基础题吧
    • 因为C++有字符串类型,直接用string就行了,因为它内置了比较函数
    • 然后我用的是Set去重,转入Vector中找位置就行了,(注意Set有无序性!)
    • 其实也可以在Vector中利用unique去重,都行啦。
    • 代码:
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <sstream>
     6 #include <iomanip>
     7 #include <map>
     8 #include <stack>
     9 #include <deque>
    10 #include <queue>
    11 #include <vector>
    12 #include <set>
    13 #include <list>
    14 #include <cstring>
    15 #include <cctype>
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <cmath>
    19 #include <bitset>
    20 #include <ctime>
    21 #include <fstream>
    22 #include <limits.h>
    23 #include <numeric>
    24 
    25 using namespace std;
    26 
    27 #define F first
    28 #define S second
    29 #define mian main
    30 #define ture true
    31 
    32 #define MAXN 1000000+5
    33 #define MOD 1000000007
    34 #define PI (acos(-1.0))
    35 #define EPS 1e-6
    36 #define MMT(s) memset(s, 0, sizeof s)
    37 typedef unsigned long long ull;
    38 typedef long long ll;
    39 typedef double db;
    40 typedef long double ldb;
    41 typedef stringstream sstm;
    42 const int INF = 0x3f3f3f3f;
    43 
    44 set<string>s;
    45 vector<string>p;
    46 char a[10005][40];
    47 
    48 int main(){
    49     ios_base::sync_with_stdio(false);
    50     cout.tie(0);
    51     cin.tie(0);
    52     int n;
    53     while(~scanf("%d",&n)){
    54         s.clear();
    55         p.clear();
    56         for(int i = 0; i < n; i++){
    57             scanf("%s",&a[i]);
    58             s.insert(a[i]);
    59         }
    60         p.assign(s.begin(),s.end());
    61         for(int i = 0; i < n; i++){
    62           printf("%d
    ",lower_bound(p.begin(),p.end(),a[i]) - p.begin() + 1);
    63         }
    64     }
    65     return 0;
    66 }
    View Code

    大部分都是一些基础题,我猜他们开这个专题也是为了让大家熟悉STL中的东西。

    还是很值得一做的。毕竟多做题总是有好处。

    我做的时候有些题目TLE了,所以也不是说直接上去写个什么什么就AC了,还是很值得一做的,还有这个OJ有些题目会提交失败,各位可以搜题然后去原OJ提交。

    别问我为啥做这个OJ,很多都有做,还有就是,这个OJ界面做的很好有木有,题目也很好啦。

  • 相关阅读:
    vue项目按钮权限配置
    页面框架搭建模板可复用
    vue循环渲染复选框列表
    Vue项目网页版在浏览器中实现扫码识别功能(项目应用篇)
    基于51单片机的智能小车
    卡特兰数:翻折思想 翻折前后一一对应
    Redis之Info指令
    Redis的安全使用
    Redis中的近似LRU超出内存限制后的处理
    Redis主从同步
  • 原文地址:https://www.cnblogs.com/xenny/p/9370160.html
Copyright © 2020-2023  润新知