POJ 2947 Widget Factory 高斯消元

原创 2012年03月31日 13:30:38

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove

继续高斯消元

建立方程

A11*X1+A12*X2+……A1N*XN同余B1%7

A21*X1+A22*X2+……A2N*XN同余B2%7


AM1*X1+AM2*X2+……AMN*XN同余BM%7

然后便是高斯消元解这个方程,

无解情况,出现一行系统全为0,等式右边却不为0。

多解情况,变元个数大于方程个数

否则为一解情况,解出方程的解便可

/*
ID:cxlove
PROB:poj 2947
DATA:2012.3.31
HINT:高斯消元
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int a[305][305];
int change(char s[10]){
	if(strcmp(s,"MON")==0)
		return 1;
	else if(strcmp(s,"TUE")==0)
		return 2;
	else if(strcmp(s,"WED")==0)
		return 3;
	else if(strcmp(s,"THU")==0)
		return 4;
	else if(strcmp(s,"FRI")==0)
		return 5;
	else if(strcmp(s,"SAT")==0)
		return 6;
	else return 7;
}
void gauss(){
	int i,j;
	int ans[305];
	for(i=0,j=0;i<m&&j<n;j++){
		int k;
		for(k=i;k<m;k++)
			if(a[k][j])
				break;
		if(a[k][j]){
			for(int r=j;r<=n;r++)
				swap(a[k][r],a[i][r]);
			for(int r=0;r<m;r++)
				if(r!=i&&a[r][j]){
					int b1=a[i][j],b2=a[r][j];
					for(int t=0;t<=n;t++)
						a[r][t]=((a[r][t]*b1-a[i][t]*b2)%7+7)%7;
				}
			i++;
		}
	}
	for(int k=i;k<m;k++)
		if(a[k][n]){
			printf("Inconsistent data.\n");
			return;
		}
	if(i<n){
		printf("Multiple solutions.\n");
		return ;
	}
	/*for(int i=0;i<m;i++){
		for(int j=0;j<=n;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}*/
	for(i=n-1;i>=0;i--){
		int temp=a[i][n];
		for(j=i+1;j<n;j++)
			temp=((temp-a[i][j]*ans[j])%7+7)%7;
		while(temp%a[i][i]!=0)temp += 7;
		ans[i]=(temp/a[i][i])%7;
	}
	for(i=0;i<n;i++)
		if(ans[i]<3)
			ans[i]+=7;
	for(i=0;i<n-1;i++)
		printf("%d ",ans[i]);
	printf("%d\n",ans[n-1]);
}
int main(){
	char str1[10],str2[10];
	while(scanf("%d%d",&n,&m)!=EOF&&n+m){
		memset(a,0,sizeof(a));
		for(int i=0;i<m;i++){
			int k;
			scanf("%d%s%s",&k,str1,str2);
			a[i][n]=(change(str2)-change(str1)+1+7)%7;
			while(k--){
				int num;
				scanf("%d",&num);
				a[i][num-1]++;
			}
			for(int j=0;j<n;j++)
				a[i][j]%=7;
		}
		/*for(int i=0;i<m;i++){
			for(int j=0;j<=n;j++)
				printf("%d ",a[i][j]);
			printf("\n");
		}*/
		gauss();
	}
	return 0;
}


poj 2947 Widget Factory(高斯消元解同余方程组)

Language: Default Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total...
  • u011699990
  • u011699990
  • 2015年05月23日 00:06
  • 650

POJ 2947 Widget Factory <高斯消元同余线性方程>

传送门:http://poj.org/problem?id=2947 题意:一个部件工厂要生产一批不同种类的零件,每种零件生产时间(3),给你n种零件和m工人生产数据,求每个零件生产时间? 分析:高...
  • xf_zhen
  • xf_zhen
  • 2016年07月26日 21:07
  • 218

poj 2947 Widget Factory 高斯消元解模线性方程

http://poj.org/problem?id=2947 思路: http://blog.csdn.net/u013486414/article/details/46999499 http:...
  • chen_minghui
  • chen_minghui
  • 2017年07月09日 20:12
  • 96

poj 2947 Widget Factory(高斯消元解同余方程组)

Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 4260   ...
  • WEYuLi
  • WEYuLi
  • 2014年02月18日 19:06
  • 651

poj 2947 Widget Factory(数学:高斯消元)

又是模板题
  • u011639256
  • u011639256
  • 2014年11月22日 00:18
  • 271

POJ 2947 Widget Factory 解题报告(高斯消元法)

题目大意:某工厂,每个零件的加工时间是3天到9天。现在只有一些记录,记录中有开始是星期几,结束是星期几,加工了哪些零件,问你能不能求出加工每个零件所需要的天数。     解题报告:高斯消元法解线性方程...
  • kbdwo
  • kbdwo
  • 2013年08月09日 15:11
  • 711

文章标题 POJ 2947 : Widget Factory (高斯消元)

题目链接 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start end a1,a2……ap (1...
  • Wang_SF2015
  • Wang_SF2015
  • 2017年08月07日 15:37
  • 71

poj 2947 Widget Factory (高斯消元,解模线性方程)

题意:生产一些零件,已知零件种数,记录条数 记录只记录了某次生产从周几开始,周几结束,以及生产了哪些产品。 每件商品生产所需天数为3-9天。 求每样产品需要多少天才能完成。 若无解输出Inconsis...
  • acm_code
  • acm_code
  • 2015年01月29日 15:09
  • 984

【POJ 2947】Widget Factory(高斯消元+逆元)

【POJ 2947】Widget Factory(高斯消元+逆元) Widget Factory Time Limit: 7000MSMemory Limit: 65536KTotal Submiss...
  • ChallengerRumble
  • ChallengerRumble
  • 2016年07月28日 10:12
  • 652

poj 2947 Widget Factory 【高斯消元解模线性方程组】

Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5074   Accepted: 1...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2015年10月06日 19:46
  • 320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2947 Widget Factory 高斯消元
举报原因:
原因补充:

(最多只允许输入30个字)