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(高斯消元解同余方程组)

传送门Widget FactoryTime Limit: 7000MSMemory Limit: 65536KTotal Submissions: 5663Accepted: 1961Descript...

poj 2947 Widget Factory(模7环上的高斯消元)

http://poj.org/problem?id=2947 大致题意: 有n种装饰物,m个已知条件,每个已知条件的描述如下: p start end a1,a2......ap (1 第一行表示从星...

POJ 2947-Widget Factory(高斯消元解同余方程式)

题目地址:POJ 2947 题意:N种物品,M条记录,接写来M行,每行有K,Start,End,表述从星期Start到星期End,做了K件物品,接下来的K个数为物品的编号。此题注意最后结果要调整到3-...

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

Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 4260   ...

POJ 2947 Widget Factory(高斯消元)

题目连接~~~  本题是对同余方程组消元,方程比较好列,本题可以列m个方程,每个方程可以列成k1*x1 + k2*x2……kn*xn = y1 (mod 7)  y1是加工这一批零件所需要的时间。然后...

poj -- 2947 Widget Factory(高斯消元)

有n种产品,m个员工,每个员工在gei

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

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

POJ2947高斯消元+同余方程

Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 3453   ...

【POJ2947】 Widget Factory (模线性方程)

题目大意:n种零件,m次工作日程,零件序号从1到n,给出m次工作日程的信息,x,s,e,表示生产了x个零件,从星期s开始到星期e(有可能是多个星期),然后给出生产的x个零件的序号。求每个零件被生产需要...

poj 2947 Widget Factory

题目链接:http://poj.org/problem?id=2947 题目大意: n种项目,每种项目由一个工人在[3,9]天里完成(项目完成时间对于每个人是一样的),给出每个工人开始...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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