WA 90pts 求助
查看原帖
WA 90pts 求助
374433
ppip嘟嘟嘟楼主2022/8/24 10:02

rt. WA on #6.

#include <bits/stdc++.h>
using namespace std;
inline int read() {
    char c;int x,f{0};
    do x=(c=getchar())^48;
    while (!isdigit(c)&&c!='-');
    if (x==29) x=0,f=-1;
    while (isdigit(c=getchar()))
        x=(x<<3)+(x<<1)+(c^48);
    return (x^f)-f;
}
const int N(1e5),LG{16};
int f[LG+5][N+5];
int Find(int f[],int x){return x==f[x]?x:f[x]=Find(f,f[x]);}
void merge(int f[],int x,int y){Find(f,x)!=Find(f,y)&&(f[f[x]]=f[y]);}
int main() {
    int n{read()},m{read()};
    for (int j{0};j<=LG;++j)
        for (int i{1};i<=n;++i)
            f[j][i]=i;
    while (m--) {
        int a{read()},d{read()},b{read()};read();
        d+=-a+1;
        for (int i{0};d;++i,d>>=1)
            if (d&1) {
                merge(f[i],a,b);
                a+=1<<i;b+=1<<i;
            }
    }
    for (int i{1};i<=n;++i)
        for (int j{LG};j>=1;--j)
            if (i+(1<<j)-1<=n) {
                merge(f[j-1],i,f[j][i]);
                merge(f[j-1],i+(1<<j-1),f[j][i]+(1<<j-1));
            }
    int cnt{0};
    for (int i{1};i<=n;++i)
        cnt+=(f[0][i]==i);
    int ans{9};
    while (--cnt)
        ans=1LL*ans*10%(1000000007);
    cout<<ans<<endl;
    return 0;
}
2022/8/24 10:02
加载中...