2020こんにちは

ゲームのリンク

\({\ frak {A。正月と命名}} \)

モジュロことができます。

\({\ frak {コード:}} \)

    #include<bits/stdc++.h>
    #define IL inline
    #define LL long long
    using namespace std;
    const int N=20+3;
    int n,m;
    string s[N],t[N],ans;
    IL int in(){
        char c;int f=1;
        while((c=getchar())<'0'||c>'9')
          if(c=='-') f=-1;
        int x=c-'0';
        while((c=getchar())>='0'&&c<='9')
          x=x*10+c-'0';
        return x*f;
    }
    int main()
    {
        int x,y,z;
        n=in(),m=in();
        for(int i=1;i<=n;++i) cin>>s[i];
        for(int i=1;i<=m;++i) cin>>t[i];
        int u=in();
        while(u--){
            x=in();y=(x-1)%n+1,z=(x-1)%m+1;
            ans=s[y]+t[z];
            cout<<ans<<endl;
        }
        return 0;
    }

\({\ frak {B。正月とアセントシーケンス}} \)

各シーケンスは、単にプロパティは2つのカテゴリに分類され、それが満たしているか否かに応じて、最大値と最小値を保存します。

ソート、エルゴード性質がセット満たしていません\(S \)に残っシーケンスとして、現在のシーケンスを\(S \)の回答を追加し、バイナリサーチの右の順序で。

ミートは、コレクションの性質は、それを言ったことはなかっただろう\(qwq \)

\({\ frak {コード:}} \)

    #include<bits/stdc++.h>
    #define IL inline
    #define LL long long
    using namespace std;
    const int N=1e5+3;
    struct hh{
        int Min,Max,bo;
    }a[N];
    int n,num,c[N],d[N];
    LL ans;
    IL int in(){
        char c;int f=1;
        while((c=getchar())<'0'||c>'9')
          if(c=='-') f=-1;
        int x=c-'0';
        while((c=getchar())>='0'&&c<='9')
          x=x*10+c-'0';
        return x*f;
    }
    int main()
    {
        int x,y,z,Max,Min;
        n=in();
        for(int i=1;i<=n;++i){
            x=in(),Max=-1e9,Min=1e9;
            for(int j=1;j<=x;++j){
                y=in();if(y>Min) a[i].bo=1;
                Min=min(Min,y),Max=max(Max,y);
            }
            a[i].Max=Max,a[i].Min=Min;
            if(a[i].bo) ++num;
        }
        for(int i=1;i<=n;++i) if(!a[i].bo) c[++c[0]]=a[i].Min,d[++d[0]]=a[i].Max;
        sort(c+1,c+c[0]+1),sort(d+1,d+d[0]+1);
        for(int i=1;i<=c[0];++i){
            x=lower_bound(d+1,d+d[0]+1,c[i]+1)-d;
            ans+=d[0]-x+1;
        }
        ans+=1ll*2*num*(n-num)+1ll*num*num;
        cout<<ans<<endl;
        return 0;
    }

\({\ frak {C。正月及び順列}} \)

長さを考えてみましょう\(I \)のサブ文字列の数、総文字セット\(N-iは+ 1 \ ) 種は、ストリング内のアレイの数をエミュレート(I \)\ \(!\) 場所\(1 + NI \)は、一種の借入の、他の文字がある\(ニッケル(Ni)\) \(!\)シード行方法。

\(ANS = \ sum_ {iは1 =} ^ {N iは!\左(NI \右)!\ NI + 1(左\右)^ 2} \)

\({\ frak {コード:}} \)

    #include<bits/stdc++.h>
    #define IL inline
    #define LL long long
    using namespace std;
    const int N=25e4+3;
    int n,p;
    LL ans,fac[N];
    IL int in(){
        char c;int f=1;
        while((c=getchar())<'0'||c>'9')
          if(c=='-') f=-1;
        int x=c-'0';
        while((c=getchar())>='0'&&c<='9')
          x=x*10+c-'0';
        return x*f;
    }
    int main()
    {
      n=in(),p=in();
      fac[0]=1;for(int i=1;i<=n;++i) fac[i]=fac[i-1]*i%p;
      for(int i=1;i<=n;++i) ans=(ans+1ll*(n-i+1)*fac[i]%p*fac[n-i]%p*(n-i+1)%p)%p;
      cout<<ans<<endl;
        return 0;
    }

\({\ frak {D。新年カンファレンス}} \)

我々は、各を尊重しなければならない\(A \)限りように、下コンフリクトのサブセット(\ B)\無競合。

もちろん、貪欲、私たちは可能な2つの要素を列挙する必要があり、左のエンドポイントの複雑さをソートした後である(O競合の(数)\)\

しかし、これはカードになります(O(^ N-2)\)\

最適化を考えてみましょう、左の端が最初にソートされ、列挙\(I \) 最初の\(I-1 \)の要素、\(ea_k \ GEQ sa_i \) その後、\(I \)\ (K \)と競合\(I \)競合の要素は、もし\(\ Kを\ EXISTS) そう\(sb_k> eb_i \)または\(eb_k <sb_i \) 次いで\(I \)そして、\(K \)ない紛争出力ん\(NO \)

だから、ヒープのメンテナンス、怠惰な削除して、二つのサイトは再びそれを総なめにしました。

コードワード。実際に、もし書込み\(\ FRAC {1} { 4} \) その他のような長さ\(fzzt \)

\({\ frak {コード:}} \)

    #include<bits/stdc++.h>
    #define IL inline
    #define LL long long
    using namespace std;
    const int N=1e5+3;
    struct hh{
        int s,t,id;
        bool operator<(const hh &a) const{
        return s^a.s?s<a.s:t<a.t;}
    }a[N],b[N];
    struct k1{
        int tim,id;
        bool operator<(const k1 &a) const{
        return tim<a.tim;}
    };
    struct k2{
        int tim,id;
        bool operator<(const k2 &a) const{
        return tim>a.tim;}
    };
    priority_queue<k1>q1;
    priority_queue<k2>q2;
    int n,p1[N],p2[N],flag;
    IL int in(){
        char c;int f=1;
        while((c=getchar())<'0'||c>'9')
          if(c=='-') f=-1;
        int x=c-'0';
        while((c=getchar())>='0'&&c<='9')
          x=x*10+c-'0';
        return x*f;
    }
    int main()
    {
        int x,y,z;
      n=in();
      for(int i=1;i<=n;++i){
        x=in(),y=in(),a[i]=(hh){x,y,i};
        x=in(),y=in(),b[i]=(hh){x,y,i};
        }
        sort(a+1,a+n+1),sort(b+1,b+n+1);
        for(int i=1;i<=n;++i) p1[a[i].id]=i,p2[b[i].id]=i;
        for(int i=1;i<=n;++i){
            x=-1e9,y=2e9;
            while(q1.size()){
                k1 u=q1.top();
                if(a[p1[u.id]].t>=a[i].s){x=u.tim;break;}
                q1.pop(); 
            }
            while(q2.size()){
                k2 u=q2.top();
                if(a[p1[u.id]].t>=a[i].s){y=u.tim;break;}
                q2.pop(); 
            }
            if(x>b[p2[a[i].id]].t||y<b[p2[a[i].id]].s){flag=1;break;}
            q1.push((k1){b[p2[a[i].id]].s,a[i].id}),
            q2.push((k2){b[p2[a[i].id]].t,a[i].id});
        }
        while(q1.size()) q1.pop();while(q2.size()) q2.pop();
        for(int i=1;i<=n;++i){
            x=-1e9,y=2e9;
            while(q1.size()){
                k1 u=q1.top();
                if(b[p2[u.id]].t>=b[i].s){x=u.tim;break;} 
                q1.pop();
            }
            while(q2.size()){
                k2 u=q2.top();
                if(b[p2[u.id]].t>=b[i].s){y=u.tim;break;} 
                q2.pop();
            }
            if(x>a[p1[b[i].id]].t||y<a[p1[b[i].id]].s){flag=1;break;}
            q1.push((k1){a[p1[b[i].id]].s,b[i].id}),
            q2.push((k2){a[p1[b[i].id]].t,b[i].id});
        }
        puts(flag?"NO":"YES");
        return 0;
    }

おすすめ

転載: www.cnblogs.com/yiqiAtiya/p/12150787.html