• URAL1561 Winnie the Pooh


    题目描述:

    vjudge

    题解:

    高消(线性基)模$7$。

    可以算是板子了。

    具体见代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N = 1050;
    const int MOD = 7;
    template<typename T>
    inline void read(T&x)
    {
        T f = 1,c = 0;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
        x = f*c;
    }
    int n,m;
    char op[20],s0[20];
    int gtdt()
    {
        scanf("%s",s0+1);
        if(s0[1]=='S'&&s0[2]=='u')return 0;
        if(s0[1]=='M')return 1;
        if(s0[1]=='T'&&s0[2]=='u')return 2;
        if(s0[1]=='W')return 3;
        if(s0[1]=='T'&&s0[2]=='h')return 4;
        if(s0[1]=='F')return 5;
        if(s0[1]=='S'&&s0[2]=='a')return 6;
        return -1;
    }
    void print(int x)
    {
        if(x==0)puts("Sunday");
        if(x==1)puts("Monday");
        if(x==2)puts("Tuesday");
        if(x==3)puts("Wednesday");
        if(x==4)puts("Thursday");
        if(x==5)puts("Friday");
        if(x==6)puts("Saturday");
    }
    int Inv[7]={0,1,4,5,2,3,6};
    struct Vec
    {
        int a[N];
        void rd(){for(int i=1;i<=m;i++)read(a[i]),a[i]%=MOD;}
    }v0;
    bool fg=0;
    struct lb
    {
        Vec v[N];int vl[N];
        bool check(Vec x)
        {
            for(int i=1;i<=m;i++)if(x.a[i])
            {
                if(!v[i].a[i])return 1;
                for(int j=i,now=Inv[x.a[i]];j<=m;j++)x.a[j]=x.a[j]*now%MOD;
                for(int j=i;j<=m;j++)x.a[j]=(x.a[j]-v[i].a[j]+MOD)%MOD;
            }
            return 0;
        }
        int query(Vec x)
        {
            int r1 = 0,r2 = 1,r = 0;
            for(int i=1;i<=m;i++)if(x.a[i])
            {
                if(!v[i].a[i])return -1;
                r=x.a[i];r2=r2*r%MOD,r1=r1*Inv[r]%MOD;
                for(int j=i,now=Inv[x.a[i]];j<=m;j++)x.a[j]=x.a[j]*now%MOD;
                r1=(r1+vl[i])%MOD;
                for(int j=i;j<=m;j++)x.a[j]=(x.a[j]-v[i].a[j]+MOD)%MOD;
            }
            return r1*r2%MOD;
        }
        void push(Vec x,int vl0)
        {
            for(int i=1;i<=m;i++)if(x.a[i])
            {
                vl0=vl0*Inv[x.a[i]]%MOD;
                for(int j=i,now=Inv[x.a[i]];j<=m;j++)x.a[j]=x.a[j]*now%MOD;
                if(!v[i].a[i]){v[i]=x,vl[i]=vl0;break;}
                vl0=(vl0-vl[i]+MOD)%MOD;
                for(int j=i;j<=m;j++)x.a[j]=(x.a[j]+MOD-v[i].a[j])%MOD;
            }
        }
    }tr;
    int main()
    {    
    //    freopen("s.in","r",stdin);
    //    freopen("s.out","w",stdout);
        read(n);
        for(int i=1,w;i<=n;i++)
        {
            scanf("%s",op+1);
            if(op[1]=='A')m++;
            else if(op[1]=='L')
            {
                v0.rd();w=(MOD-gtdt()+gtdt())%MOD;
                if(!tr.check(v0))
                {
                    if(tr.query(v0)!=w)fg=1;
                }else    tr.push(v0,w);
            }else
            {
                v0.rd();w=gtdt();
                if(fg)puts("Already crazy");
                else if(tr.check(v0))puts("Don't know");
                else print((w+tr.query(v0))%MOD);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    AC自动机 HDOJ 2222 Keywords Search
    AC自动机 HDOJ 5384 Danganronpa
    贪心 HDOJ 5385 The Path
    区间DP UVA 10739 String to Palindrome
    区间DP UVA 10453 Make Palindrome
    素数专题
    判素数+找规律 BestCoder Round #51 (div.2) 1001 Zball in Tina Town
    DP专题
    贪心+模拟 ZOJ 3829 Known Notation
    概率DP ZOJ 3822 Domination
  • 原文地址:https://www.cnblogs.com/LiGuanlin1124/p/10867900.html
Copyright © 2020-2023  润新知