2 条题解

  • 0
    @ 2024-4-10 16:44:47
    #define mod %
    #include<bits/stdc++.h>
    int p=7;
    using namespace std;
    int a[305][305],n,m,ans[305],tot;
    map<string ,int > w;
    int get(int a,int b){
    	return (b-a+8)%p;
    } 
    int exgcd(int a,int b,int &x,int &y){
    	if(!b){
    		x=1,y=0;
    		return a;
    	}
    	int d=exgcd(b,a%b,x,y);
    	int z=x;
    	x=y,y=z-(a/b)*y;
    	return d;
    }
    void init(){
    	w["MON"]=1;
    	w["TUE"]=2;
    	w["WED"]=3;
    	w["THU"]=4;
    	w["FRI"]=5;
    	w["SAT"]=6;
    	w["SUN"]=7;
    }
    void Guass(){
    	int w=0;
    	for(int i=1;i<=m;i++){
    		int o=0;
    		for(int j=w+1;j<=n;j++){
    			if(a[j][i]&&(!o||a[j][i]>a[o][i])){
    				o=j;
    			}
    		}
    		if(!o)continue;
    		++w;
    		for(int k=1;k<=m+1;k++)swap(a[w][k],a[o][k]);
    		for(int j=1;j<=n;j++){
    			if(j!=w&&a[j][i]){
    				int x=a[j][i];
    				for(int k=1;k<=m+1;k++)a[j][k]=(a[j][k]*a[w][i]-a[w][k]*x)%p;
    			}
    		}
    	} 
    	for(int i=w+1;i<=n;i++){
    		a[i][m+1]%=p;
    		if(a[i][m+1]){
    			printf("Inconsistent data.\n");
    			return ;
    		}
    	}
    	if(w<m){
    		printf("Multiple solutions.\n");
    		return ;
    	}
    	for(int i=1;i<=m;i++){ 
    		int x,y,d;
    		d=exgcd(a[i][i],7,x,y);
    		x=x*a[i][m+1]/d;
    		if(a[i][m+1]%d){ 
    			printf("Inconsistent data.\n"); 
    			return ;
    		} 
    		ans[++tot]=((x-3)%p+p)%p+3;
    	}
    	for(int i=1;i<=tot;i++)printf("%d ",ans[i]);
    	puts("");
    	return ;
    } 
    int main(){
    	init();
    	while(~scanf("%d%d",&m,&n)&&m&&n){
    		tot=0;
    		memset(a,0,sizeof a);
    		string x,y;
    		int k;
    		for(int i=1;i<=n;i++){
    			cin>>k>>x>>y;
    			a[i][m+1]=get(w[x],w[y]);
    			for(int j=1;j<=k;j++){
    				int q;
    				scanf("%d",&q);
    				a[i][q]++; 
    				a[i][q]%=p;
    			}
    		}
    		Guass();
    	}
    }
    

    信息

    ID
    138
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    8
    已通过
    5
    上传者