2 条题解

  • 0
    @ 2024-5-17 22:31:02
    #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();
    	}
    }
    
    • 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();
      	}
      }
      
      • 1

      信息

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