• 18多校8th


    a-容斥原理(带限制的不定方程)

    #include<bits/stdc++.h>
    using namespace std;
    #define mod 998244353
    #define ll long long
    #define maxn 500005
    ll n,m,k;
    ll inv[maxn],f[maxn],invf[maxn];
    void init(){
        inv[0]=inv[1]=1;
        for(int i=2;i<maxn;i++)
            inv[i]=(mod-mod/i)*inv[mod%i]%mod;
        f[0]=f[1]=invf[0]=invf[1]=1;
        for(int i=2;i<maxn;i++){
            f[i]=f[i-1]*i%mod;
            invf[i]=invf[i-1]*inv[i]%mod;
        }
    }
    ll C(ll a,ll b){
        if(a<0 || b<0 || a>b)return 0;
        return f[b]*invf[a]%mod*invf[b-a]%mod;
    }
    int main(){
        int T;cin>>T;init();
        while(T--){
            scanf("%lld%lld%lld",&n,&m,&k);        
            int cur=1;    
            ll ans=0;    
            for(int i=0;i*n<=k;i++){
                ans+=cur*C(m-1,k+m-i*n-1)*C(i,m)%mod;
                ans=(ans%mod+mod)%mod;
                cur*=-1;
            }
            cout<<ans<<endl;
        }
    }
    View Code

    E-水题

    #include <bits/stdc++.h>
    using namespace std;
    
    #define REP(i,s,t) for(int i=s;i<=t;i++)
    char mpa[5][5];
    
    void rotatec(int x1,int y1,int x2,int y2){
        char a=mpa[x1][y1];
        char b=mpa[x1][y2];
        char c=mpa[x2][y1];
        char d=mpa[x2][y2];
        mpa[x1][y1]=c;
        mpa[x1][y2]=a;
        mpa[x2][y1]=d;
        mpa[x2][y2]=b;
    }
    
    void rotater(int x1,int y1,int x2,int y2){
        char a=mpa[x1][y1];
        char b=mpa[x1][y2];
        char c=mpa[x2][y1];
        char d=mpa[x2][y2];
        //printf("a=%c b=%c c=%c d=%c 
    ",a,b,c,d);
        mpa[x1][y1]=b;
        mpa[x1][y2]=d;
        mpa[x2][y1]=a;
        mpa[x2][y2]=c;
        //printf("1=%c 2=%c 3=%c 4=%c 
    ",mpa[x1][y1],mpa[x1][y2],mpa[x2][y1],mpa[x2][y2]);
    }
    
    int main(){
        int T;cin>>T;
        while(T--){
            int q;cin>>q;
            REP(i,1,3)REP(j,1,3)cin>>mpa[i][j];
            while(q--){
                string str;cin>>str;
    //            cout<<"str[0]="<<str[0]<<endl;
    //            cout<<"str[1]="<<str[1]<<endl;
                if(str[0]=='1'){
                    if(str[1]=='C'){
                        rotatec(1,1,2,2);
                    }else if(str[1]=='R'){
                        rotater(1,1,2,2);
                    }
                }else if(str[0]=='2'){
                    if(str[1]=='C')rotatec(1,2,2,3);
                    else rotater(1,2,2,3);
                }else if(str[0]=='3'){
                    if(str[1]=='C')rotatec(2,1,3,2);
                    else rotater(2,1,3,2);
                }else if(str[0]=='4'){
                    if(str[1]=='C')rotatec(2,2,3,3);
                    else rotater(2,2,3,3);
                }
            }
            REP(i,1,3){
                REP(j,1,3){
                    printf("%c",mpa[i][j]);
                }puts("");
            }
        }
    }
    View Code

    j-线段树好题(查找区间[l,r[第一个非空元素,开全局变量)

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define maxn 100005
    
    int a[maxn],dp1[maxn],dp2[maxn],T,n,m,p,q,p2;
    
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    int M1[maxn<<2],M2[maxn<<2];
    void pushup(int rt){
        M1[rt]=max(M1[rt<<1],M1[rt<<1|1]);
        if(M1[rt<<1]>=M1[rt<<1|1])M2[rt]=M2[rt<<1];
        else M2[rt]=M2[rt<<1|1];    
    }
    void build(int l,int r,int rt){
        if(l==r){M1[rt]=a[l];M2[rt]=l;return;}
        int m=l+r>>1;
        build(lson);build(rson);
        pushup(rt);
    }
    void query1(int l,int r,int rt,int L,int R){
        if(l>=L && r<=R){if(M1[rt]>a[p2])p2=M2[rt];return;}
        int m=l+r>>1;
        if(L<=m)query1(lson,L,R);
        if(R>m)query1(rson,L,R);
    }
    void query(int l,int r,int rt,int L,int R,int k){
        if(l==r){if(M1[rt]>k)p2=min(p2,l);return;}
        int m=(l+r)/2;
        if(l>=L&&r<=R){        
            if(M1[rt<<1]>k)query(lson,L,R,k);
            else if(M1[rson]>k)query(rson,L,R,k);
            return;
        }
        if(L<=m)query(lson,L,R,k);
        if(R>m)query(rson,L,R,k);
    }
    void init(){
        for(int i=n;i;i--){
            p2=n+1;query(1,n,1,i,n,a[i]);
            if(p2>n)p2=0;dp2[i]=dp2[p2]+1;
        }
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            int Mx=0;
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=1;i<=n;i++){
                if(a[i]>Mx) dp1[i]=dp1[i-1]+1,Mx=a[i];
                else dp1[i]=dp1[i-1];
            }
            build(1,n,1);
            init();
            
            while(m--){
                int p,q,ans=0;
                scanf("%d%d",&p,&q);p2=0;
                if(p!=1)query1(1,n,1,1,p-1);
                ans+=dp1[p2];
                if(q>a[p2]) ans++;
                else q=a[p2];p2=n+1;
                if(p!=n) query(1,n,1,p+1,n,q);
                if(p2<=n) ans+=dp2[p2];
                printf("%d
    ",ans);            
            }
        }
    }
    View Code
  • 相关阅读:
    Windows 8.1 应用开发文章汇总
    演绎事件委托
    Azure China
    Orchard 刨析:导航篇
    为ASP.NET MVC应用程序使用高级功能
    兼容Mono的下一代云环境Web开发框架ASP.NET vNext
    商品导航菜单
    纳斯达克对经济泡沫的定义是:当交易价格远大于内在价值的时候,就称为泡沫(转)
    当一个低级问题,第一次解决时,你会感受到成就;第二次解决时,你感受到责任,第三次解决时,你可能更多的感受到无力(转)
    互联网组织的未来:剖析GitHub员工的任性之源(转)
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10888389.html
Copyright © 2020-2023  润新知