2 条题解
-
0李睿尧 LV 10 @ 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(); } }
-
02024-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
- 上传者