有些题你写多了或许就不觉得麻烦了,但是这题是我三天前拖欠的,一直不敢写..ε=唉,我对于100+的纯代码都有一种莫名的恐惧感.其实每个题也就那么几个过程.
这题是用高斯消元解异或同余方程.并没有重点要讲的地方.
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=305;
const int mod=7;
int a[N][N];
string s[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
inline int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}

inline int lcm(int a,int b)
{
    return a/gcd(a,b)*b;
}

inline int gauss(int n,int m)
{
    int l,r;
    for(l=0,r=0;l<n;l++)
    {
        int pos=r;
        for(int i=r+1;i<m;i++)
        {
            if(a[i][l]>a[pos][l])
            {
                pos=i;
            }
        }
        for(int i=l;i<=n;i++)   swap(a[pos][i],a[r][i]);
        if(a[r][l]==0)    {continue;}
        for(int i=r+1;i<m;i++)
        {
            if(a[i][l]!=0)
            {
                int ta=lcm(a[r][l],a[i][l]);
                int tb=ta/a[r][l];
                int tc=ta/a[i][l];
                for(int j=l;j<=n;j++)
                {
                    a[i][j]=((tc*a[i][j]-tb*a[r][j])%mod+mod)%mod;
                }
            }
        }
        r++;
    }
    //无解
    for(int i=r;i<m;i++)
    {
        if(a[i][n]!=0)    return 0;
    }
    //无数解
    if(r<n)
    {
        return 1;
    }
    else
    {
        for(int i=n-1;i>=0;i--)
        {
            for(int j=i+1;j<n;j++)
            {
                a[i][n]-=a[i][j]*a[j][n];
                a[i][n]=(a[i][n]%mod+mod)%mod;
            }
            while(a[i][n]%a[i][i]!=0) a[i][n]+=mod;
            a[i][n]/=a[i][i];
        }
        return 2;
    }
}

int main()
{
    int n,m;//n个未知数,m个方程.
    while(cin>>n>>m)
    {
        memset(a,0,sizeof a);
        if(n==0&&m==0)  break;
        for(int i=0;i<m;i++)
        {
            int k;string b,c;
            cin>>k>>b>>c;
            while(k--)
            {
                int x;
                scanf("%d",&x);
                a[i][x-1]++;
                if(a[i][x-1]>=mod) a[i][x-1]%=mod;
            }
            int aa,ab;
            for(int i=0;i<7;i++)
            {
                if(s[i]==b) aa=i;
                if(s[i]==c) ab=i;
            }
            a[i][n]=((ab-aa+1)%mod+mod)%mod;
        }
        int t=gauss(n,m);
        if(t==0)
        {
            puts("Inconsistent data.");
        }//无解
        else if(t==1)
        {
            puts("Multiple solutions.");
        }//无数解
        else
        {
            for(int i=0;i<n;i++)    {if(a[i][n]<3) a[i][n]+=7;printf("%d ",a[i][n]);}
            printf("\n");
        }//唯一解
    }
    return 0;
}

自己debug还是要有勇气ε唉~