题目描述:
题解:
高消(线性基)模$7$。
可以算是板子了。
具体见代码:
#include#include #include using namespace std;const int N = 1050;const int MOD = 7;template 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;}