题解:P11043 [蓝桥杯 2024 省 Java B] 分布式队列

· · 题解

这个题完全不需要管队列中的元素值,只需要记录每个队列的长度即可。

开一个一维数组记录长度。

当输入为 add 时,0 号节点的长度加一。

当输入为 sync 时,设输入的数为 x,则 x 号节点的长度加一。

每次询问只需输出队列长度的最小值即可。

#include <bits/stdc++.h>
using namespace std;

#define For(i,x,y,...) for(long long i=(x),##__VA_ARGS__;i<=(y);++i)
#define foR(i,x,y,...) for(int i=(x),##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<(y);++i)
#define endl '\n'
#define debug(...)
#define debug1(a,i,...) cout<<i<<" "<<a[i]<<endl;
typedef long long ll;
#define fi first
#define se second
#define PII pair<int,int>
#define me(s,x) memset(s,x,sizeof s)
#define pb emplace_back

template<typename T=int>T read(){T x;cin>>x;return x;}
const int mod=998244353;
struct mint{
    int x;mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
    mint(ll y){y%=mod,x=y<0?y+mod:y;}
    mint& operator += (const mint &y){x=x+y.x<mod?x+y.x:x+y.x-mod;return *this;}
    mint& operator -= (const mint &y){x=x<y.x?x-y.x+mod:x-y.x;return *this;}
    mint& operator *= (const mint &y){x=1ll*x*y.x%mod;return *this;}
    friend mint operator + (mint x,const mint &y){return x+y;}
    friend mint operator - (mint x,const mint &y){return x-y;}
    friend mint operator * (mint x,const mint &y){return x*y;}
};mint Pow(mint x,ll y=mod-2){mint z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return z;}
int q[15];
void MAIN(){
    int n;
    cin>>n;
    string op;
    int x;
    while(cin>>op){
        if(op=="add"){
            cin>>x;
            q[0]++;
        }
        else if(op=="sync"){
            cin>>x;
            q[x]++;
        }
        else{
            cout<<*min_element(q,q+n)<<endl;
        } 
    }
}signed main(){
    int t=1;while(t--){
        MAIN();
    }
    return 0;
}