操作の白い牛の月のシーズン22 A.シーケンスオフ

操作の白い牛の月のシーズン22 A.シーケンスオフ

タイトル説明

無限長の列の所定の数、最初に全てゼロは、3つのアクションがあります。

増加操作:添字tはプラスCの数です。なお、もし添字 [ t 30 , t + 30 ] [T-30、T + 30] の非ゼロの数を持って、無効な操作を増加させます。
切り取り操作:最小の非ゼロの数字がゼロのインデックス内のカラム数をしてみましょう。
クエリ:クエリは、添字Tの列の数がデジタル数字です。
入力説明:
最初の行は整数が含まれています N , 1 N 1 0 6 N、1 \ N \ 10 ^ 6 、操作の総数を表します。
次いで、N行、二桁または数字からなる各行。
オペレーティングT、Cの増加を表す行に2つの数字は、存在する場合。
唯一の行数-1の場合、縮小動作を行います。
ラインだけでなく-1デジタルである場合、tはクエリ操作の数を表しています。
保証T、Cとプラスチックの範囲内で、非負整数です。

出力説明:

リダクション演算は、デジタル第一出力し、ゼロになると
、全てゼロシーケンス要素が、切断操作が無効である場合、出力は「スキップ」
に、出力位置の数を照会を

例1

エントリー

 7
140 1
120 2
100 3
120
100
-1
100

輸出

0
3
3
0

例2

エントリー

4
140 3
-1
140 1
-1

輸出

3
1

例3

エントリー

3
-1
-1
-1

輸出

skipped
skipped
skipped

一見のトピックを参照してくださいアイデアがシミュレートするのですが、本当に私が85%を超えるデジタルに入力された文字列、である、最適化入力する方法がわからない、他の人のコードを読んだ後、私は良い解決策入力を見つけました方法は、あなたの参考のためにぶらぶら:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
int main(){
    int t,id,add;
    char c;
    map<int,int>m;
    cin>>t;
    while(t--){
        scanf("%d%c",&id,&c);
        if(c==' '){
            scanf("%d",&add);
            int flag=1;
            for(int i=id-30;i<=id+30;i++)
                if(m.count(i)) flag=0;
            if(flag) m[id]=add;
        }
        else if(id==-1){
            if(m.empty()) puts("skipped");
            else{
                printf("%d\n",m.begin()->second);
                m.erase(m.begin());
            }
        }
        else{
            if(m.count(id))printf("%d\n",m[id]);
            else puts("0");            
        }
    }
    return 0;
}
发布了296 篇原创文章 · 获赞 15 · 访问量 2万+

おすすめ

転載: blog.csdn.net/qq_43765333/article/details/104460350