1022模擬賽

寫在前面

今天考了一場51nod的比賽,感受很自閉。或許是由於我太菜了node

T1小w的鐵路圖

連接ide

Idea

題意: 給定一張有向圖,對於每一條邊,求刪去該邊後兩端點最短路長度。ui

這題仍是比較水的,感受沒啥好說的。圖論?idea

具體看代碼吧看戲1.jpgspa

Code

namespace Sol{
    struct node{
        int v,net;
    }e[maxn<<1];
    int head[maxm],dis[maxm],tot;
    int a[maxn],b[maxn];
    bool vis[maxm];
    queue<int> q;
    inline void add(int x,int y){
        e[++tot].v=y; e[tot].net=head[x]; head[x]=tot;
    }
    inline int bfs(int st,int ed){//處理並求解
        mem(vis,false);
        while(q.size()) q.pop();
        q.push(st); dis[st]=0; vis[st]=1;
        for(int i=head[st];i;i=e[i].net){//處理邊權
            int y=e[i].v;
            if(y==ed) continue;
            q.push(y); dis[y]=1; vis[y]=1;
        }
        q.pop();
        while(q.size()){
            int x=q.front(); q.pop();
            for(int i=head[x];i;i=e[i].net){
                int y=e[i].v;
                if(vis[y]) continue;
                if(y==ed) return dis[x]+1;
                dis[y]=dis[x]+1;
                vis[y]=1; q.push(y);
            }
        }
        return -1;
    }
    inline void Main(){
        int n=read(),m=read();
        for(int i=1;i<=m;i++){
            a[i]=read(); b[i]=read();
            add(a[i],b[i]);
        }
        for(int i=1;i<=m;i++)
            printf("%d ",bfs(a[i],b[i]));
    }
}

T2矩形的面積交

連接.net

2code

因爲數據過大,這裏又開了個題ci

Idea

這道題看到題目我就想起線段樹。。。get

由於矩形的面積並就是線段樹寫的youl.pngyoul.pngit

因此這就是一道 線段樹+前綴和

因此在我看來,這是一道噁心人的題

考場上調出來了,可是隻有\(10\ pts\),還不如爆搜的\(20\ pts\)

Code

namespace Sol{
    ll ans[maxn];
    struct data{
        int h,l,r,k,id;//h爲高度,l,r爲區間,k爲係數,id爲編號
        bool operator<(const data&x)const{return h<x.h;}
    }e[maxn<<2];
    struct node{
        int l,r;
        ll add,sum;//表示長度和總和,原諒我不寫len,
        int s,t;
        int lenth(){return r-l+1;}
        inline node operator+=(const node x){add+=x.add; sum+=x.sum;}
        #define l(x) tree[x].l
        #define r(x) tree[x].r
        #define s(x) tree[x].s
        #define t(x) tree[x].t
        #define add(x) tree[x].add
        #define sum(x) tree[x].sum//define它不香麼?
    }tree[maxn<<2];
    inline void update(int o){
        int lson=o<<1,rson=lson|1;
        sum(o)=sum(lson)+sum(rson);
        add(o)=add(lson)+add(rson);
    }
    inline void build(int o,int l,int r){
        l(o)=l; r(o)=r;
        if(l==r) return;
        int lson=o<<1,rson=lson|1;
        int mid=l+r>>1;
        build(lson,l,mid);
        build(rson,mid+1,r);
    }
    inline void pushdown(int o){
        if(s(o)){
            int lson=o<<1,rson=lson|1;
            s(lson)+=s(o); s(rson)+=s(o);
            sum(lson)+=s(o)*tree[lson].lenth();
            sum(rson)+=s(o)*tree[rson].lenth();
            s(o)=0;
        }
        if(t(o)){
            int lson=o<<1,rson=lson|1;
            t(lson)+=t(o); t(rson)+=t(o);//考場上寫成了+=s(o).....
            add(lson)+=t(o)*tree[lson].lenth();
            add(rson)+=t(o)*tree[rson].lenth();
            t(o)=0;
        }
    }
    inline void change(int o,int l,int r,int x,int k){
        if(l<=l(o)&&r(o)<=r){
            s(o)+=x*k; t(o)+=k;
            sum(o)+=x*k*tree[o].lenth();
            add(o)+=k*tree[o].lenth();
            return;
        }
        pushdown(o);
        int lson=o<<1,rson=lson|1;
        int mid=l(o)+r(o)>>1;
        if(l<=mid) change(lson,l,r,x,k);
        if(r> mid) change(rson,l,r,x,k);
        update(o);
    }
    node ask(int o,int l,int r){
        if(l<=l(o)&&r(o)<=r) return tree[o];
        pushdown(o);
        int lson=o<<1,rson=lson|1;
        int mid=l(o)+r(o)>>1;
        node res=(node){0,0,0,0,0,0};
        if(l<=mid) res+=ask(lson,l,r);
        if(r> mid) res+=ask(rson,l,r);
        return res;
    }
    inline void Main(){
        int n=read(),m=read(),W=read(),L=read(),cnt=0;
        for(int i=1;i<=n;i++){
            int x=read(),y=read(),a=read(),b=read();
            e[++cnt]=(data){x,y+1,b, 1,0};
            e[++cnt]=(data){a,y+1,b,-1,0}; 
        }
        for(int i=1;i<=m;i++){
            int x=read(),y=read(),a=read(),b=read();
            e[++cnt]=(data){x,y+1,b,-1,i};
            e[++cnt]=(data){a,y+1,b, 1,i};
        }
        build(1,1,L);
        sort(e+1,e+cnt+1);
        for(int i=1;i<=cnt;i++){
            if(!e[i].id) change(1,e[i].l,e[i].r,e[i].h,e[i].k);
            else{
                node x=ask(1,e[i].l,e[i].r);
                ans[e[i].id]+=e[i].k*(x.add*e[i].h-x.sum);
            }
        }
        for(int i=1;i<=m;i++)
            printf("%lld\n",ans[i]);
    }
}

T3重排題

連接

Idea

只須要奇數位和偶數位對11 同餘。

咱們能夠預處理\(f[i][j]\)表示\(i\)個數字和模\(11\)\(j\)的方案數。

若增長一個數\(x\),有:
\(f[i+1][(j+x)\bmod 11]+=f[i][j]\)

若減去一個數,有:
\(f[i+1][(j+x)\bmod 11]−=f[i][j]\)

如今咱們依次填入數字。

對於當前還剩下\(pos\)位,數字和爲\(S\) ,咱們能夠從高到低枚舉\(x\),並刪除\(x\),若是存在$f[pos][S]>0$0就意味有解;不然加上這個數字,考慮下一個數字。

因爲方案數較大,咱們須要考慮取模。我這裏對988244353取模。(你找個喜歡的數字就行傻笑.png

Code

namespace Sol{//namespace 真香
    int cnt[maxn],f[maxn][20];
    int n,sum,Max;
    char a[maxn];
    inline void add(int x){
        for(int i=Max;i>=0;i--) 
        for(int j=0;j<11;j++)
            (f[i+1][(j+x)%11]+=f[i][j])%=mod;
        Max++; cnt[x]++;
        return;
    }
    inline void del(int x){
        for(int i=0;i<=Max;i++)
        for(int j=0;j<11;j++)
            (f[i+1][(j+x)%11]+=mod-f[i][j])%=mod;
        Max--; cnt[x]--;
        return;
    }
    inline void Main(){
        cin>>a+1;
        n=strlen(a+1);
        f[0][0]=1;
        for(int i=1;i<=n;i++){
            sum=(sum+a[i]-48)%11;
            add(a[i]-48);
        }
        int half=sum*6%11; 
        int s0=half,s1=half;
        for(int i=1;i<=n;i++){
            int S,pos;
            if(i&1) pos=n/2-i/2,S=s0;
            if(!(i&1)) pos=(n+1)/2-(i+1)/2,S=s1;
            int j;
            for(j=9;j>=0;j--){
                if(cnt[j]==0) continue;
                del(j);
                if(f[pos][S]) break;
                add(j); 
            }
            if(i&1) s1=(s1+11-j)%11;
            if(!(i&1)) s0=(s0+11-j)%11;
            putchar('0'+j);
        }
    }
}

\[ The \quad End \]
\[ \text{You better know one little thing the only thing;}\\ \text{You're gonna sling is a wedding ring.}\\ \text{《Cause You're My Zing》 - Becky G} \]

相關文章
相關標籤/搜索