• Educational Codeforces Round 95


    标准上分场 $unrated$ (可以早睡觉。

    A-Buying Torches

    出题人?

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define int long long
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    int T,a,b,c;
    signed main(){
        T=read();
        while(T--){
            a=read(),b=read(),c=read();
            int w=(b+1)*c-1;a--;
            if(w%a) printf("%lld
    ",w/a+1+c);
            else printf("%lld
    ",(w/a)+c);
        }return 0;
    }
     
    View Code

    B-Negative Prefixes

    英语阅读题。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int MAXN=101;
    int T;
    int A[MAXN],N,tmp[MAXN],B[MAXN];
    bool cmp(int x,int y){return x>y;}
    int main(){
        //freopen("1.in","r",stdin);
        T=read();
        while(T--){
            tmp[0]=0;N=read();
            for(int i=1;i<=N;i++) A[i]=read();
            for(int i=1;i<=N;i++){
                B[i]=read();
                if(!B[i]) tmp[++tmp[0]]=A[i];
            }sort(tmp+1,tmp+tmp[0]+1,cmp);int tot=0;
            for(int i=1;i<=N;i++){
                if(!B[i]) printf("%d ",tmp[++tot]);
                else printf("%d ",A[i]);
            }printf("
    ");
        }
    }
     
    View Code

    C-Mortal Kombat Tower

    英语阅读题。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define int long long
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int MAXN=2e5+11;
    int T,N,f[MAXN][2],A[MAXN],INF=INT_MAX;
    signed main(){
        //freopen("1.in","r",stdin);
        T=read();
        while(T--){
            N=read();for(int i=1;i<=N;i++) A[i]=read();
            for(int i=0;i<=N+1;i++) for(int j=0;j<=1;j++) f[i][j]=INF;
            f[0][0]=0;
            for(int i=0;i<N;i++){
                for(int j=0;j<=1;j++){
                    if(!j){
                        f[i+1][j^1]=min(f[i+1][j^1],f[i][j]+A[i+1]);
                        f[i+2][j^1]=min(f[i+2][j^1],f[i][j]+A[i+1]+A[i+2]);
                    }else{
                        f[i+1][j^1]=min(f[i+1][j^1],f[i][j]);
                        f[i+2][j^1]=min(f[i+2][j^1],f[i][j]);
                    }
                }
            }printf("%lld
    ",min(f[N][0],f[N][1]));
        }return 0;
    }
    View Code

    D-Trash Problem

    发现答案一定是 $A_n-A_1+min{A_i-A_{i+1}}$ ,直接拿 $multiset$ 维护一下即可。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #include<climits>
    #include<bitset>
    #include<set>
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    multiset<int> s1,s2;
    multiset<int>::iterator it,it1,it2,it3;
    int N,Q,siz;
    void ins(int u){
        siz++;if(siz==1){s1.insert(u);return;}
        it=s1.lower_bound(u);it1=it;it2=(--it); swap(it1,it2);
        if(it1!=s1.end()&&it2!=s1.end()&&(*it1>0)&&(*it2>0)) s2.erase(s2.find(*it1-*it2));
        if(it1!=s1.end()&&(*it1>0)) s2.insert(*it1-u);
        if(it2!=s1.end()&&(*it2>0)) s2.insert(u-*it2);
        s1.insert(u);
        return;
    }
    void del(int u){
        siz--;if(!siz){s1.erase(u);return;}
        it=s1.lower_bound(u);it3=it;
        it1=(--it);it2=(++it3);
        if(it1!=s1.end()&&(*it1>0))s2.erase(s2.find(*it1-u));
        if(it2!=s1.end()&&(*it2>0))s2.erase(s2.find(u-*it2));
        if(it1!=s1.end()&&it2!=s1.end()&&(*it1>0)&&(*it2>0))s2.insert(*it1-*it2);
        s1.erase(u);return;
    }
    int Query(){
        if(siz<=2) return 0;it=s1.end();
        it3=s1.begin();int Minn=*(++it3),Maxn=*(--it);
        int ff=*(s2.begin());
        return Maxn-Minn+ff;
    }
    int main(){
        N=read(),Q=read();s1.insert(0);
        for(int i=1;i<=N;i++) ins(read());
        //return 0;
        printf("%d
    ",Query());
        for(int i=1;i<=Q;i++){
            int opt=read(),w=read();
            if(opt) ins(w);else del(w);
            printf("%d
    ",Query());
        }return 0;
    }
    View Code

    E-Expected Damage

    为啥这题会是 $E$ 。根据期望的线性算一下即可。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define int long long
    #define mod 998244353
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int MAXN=2e5+11;
    int N,M,d[MAXN],S[MAXN];
    pii f[MAXN];
    int ksm(int a,int b){
        int ans=1;while(b){if(b&1) ans*=a,ans%=mod;a*=a,a%=mod;b>>=1;}
        return ans;
    }
    signed main(){
        //freopen("1.in","r",stdin);
        N=read(),M=read();for(int i=1;i<=N;i++) d[i]=read();
        sort(d+1,d+N+1);for(int i=1;i<=N;i++) S[i]=S[i-1]+d[i],S[i]%=mod;
        for(int i=1;i<=M;i++){
            int a=read(),b=read();
            int k=N-(lower_bound(d+1,d+N+1,b)-d)+1,l=N-k+1;
            if(a>k){printf("0
    ");continue;}
            int sum1=S[N]-S[l-1],sum2=S[l-1],inv1=ksm(k,mod-2),inv2=ksm(k+1,mod-2);
            int res1=(sum1-(a*inv1%mod*sum1%mod)+mod)%mod,res2=(sum2-(a*inv2%mod*sum2%mod)+mod)%mod;
            printf("%lld
    ",(res1+res2)%mod);
        }return 0;
    }
    View Code

    F-Equal Product

    不怎么会。

    G-Three Occurrences

    枚举 $r$ ,对于一种颜色只有选和没选两种情况,计算可能的左端点即可。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    #include<algorithm>
    #include<climits>
    #include<bitset>
    #define int long long
    #define pii pair<int,int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int MAXN=5e5+11;
    pii operator+(pii x1,pii x2){
        if(x1.fi<x2.fi) return x2;
        else if(x1.fi>x2.fi) return x1;
        return mp(x1.fi,x1.se+x2.se);
    }
    int N,A[MAXN];
    struct Segment{
        pii f[MAXN<<2];int tag[MAXN<<2];
        void build(int k,int l,int r){
            f[k].fi=0,f[k].se=1;if(l==r) return;
            int mid=(l+r)>>1;build(k<<1,l,mid),build(k<<1|1,mid+1,r);
            f[k]=f[k<<1]+f[k<<1|1];
        }
        void pushdown(int k){
            if(!tag[k]) return;
            f[k<<1].fi+=tag[k],f[k<<1|1].fi+=tag[k];
            tag[k<<1]+=tag[k],tag[k<<1|1]+=tag[k];
            tag[k]=0;return;
        }
        void Add(int k,int l,int r,int x,int y,int w){
            if(x>y) return;if(x<=l&&r<=y){f[k].fi+=w;tag[k]+=w;return;}
            pushdown(k);int mid=(l+r)>>1;
            if(x<=mid) Add(k<<1,l,mid,x,y,w);
            if(mid<y) Add(k<<1|1,mid+1,r,x,y,w);
            f[k]=f[k<<1]+f[k<<1|1];return;
        }
        pii Query(int k,int l,int r,int x,int y){
            if(x<=l&&r<=y) return f[k];
            pushdown(k);int mid=(l+r)>>1;pii p;p.fi=0,p.se=0;
            if(x<=mid) p=p+Query(k<<1,l,mid,x,y);
            if(mid<y) p=p+Query(k<<1|1,mid+1,r,x,y);
            f[k]=f[k<<1]+f[k<<1|1];return p;
        }
    }S;
    vector<int> vec[MAXN];int Ans;
    void ins(int ps){
        //printf("=============
    ");
        int siz=vec[A[ps]].size();int l1=vec[A[ps]][siz-4],l2=vec[A[ps]][siz-3],Ps=vec[A[ps]][siz-1];
        //cerr<<"ps:"<<Ps<<" l1:"<<l1<<" l2:"<<l2<<endl;
        S.Add(1,1,N,l1+1,l2,-1);S.Add(1,1,N,Ps+1,N,-1);
        vec[A[ps]].pb(ps);
        siz=vec[A[ps]].size();l1=vec[A[ps]][siz-4],l2=vec[A[ps]][siz-3],Ps=vec[A[ps]][siz-1];
        //cerr<<"ps:"<<Ps<<" l1:"<<l1<<" l2:"<<l2<<endl;
        S.Add(1,1,N,l1+1,l2,1);S.Add(1,1,N,Ps+1,N,1);
        //printf("=============
    ");
        return;
    }
    signed main(){
        //freopen("1.in","r",stdin);
        N=read();for(int i=1;i<=N;i++) A[i]=read();
        for(int i=1;i<=N;i++) for(int j=0;j<=4;j++) vec[i].pb(0);S.build(1,1,N);for(int i=1;i<=N;i++) S.Add(1,1,N,1,N,1);
        //pii p=S.Query(1,1,N,2,3);printf("%d %d
    ",p.fi,p.se);return 0;
        for(int i=1;i<=N;i++){
            ins(i);pii p=S.Query(1,1,N,1,i);
            if(p.fi==N) Ans+=p.se;
        }printf("%lld
    ",Ans);return 0;
    }/*
      9
      1 2 2 2 1 1 2 2 2
      */
     
    View Code
     

     

  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么&nbsp;我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/13676339.html
Copyright © 2020-2023  润新知