工厂里每件期间的生产时间为3-9天,告诉你有N个器件和M个计划,每个计划都是说明生产1~N号器件的时间,最后问你每件器件的生产时间。或者多解或没有解。

例如样例

2 3
2 MON THU
1 2
3 MON FRI
1 1 2
3 MON SUN
1 2 2
其中 2 MON THU 说明下面有两个器件是星期一到星期四生产的,所以有如下方程:(假设i号器件生产时间为xi)
x1+x2=4
x1+x1+x2=5
x1+x2+x2=7 很明显求方程解可以用高斯消元法,算做一道高斯消元的练习题吧。
高斯消元就是通过初等行变化把矩阵化成阶梯型矩阵,然后从低到顶求解每个变量的值。
注意如果某列对应的都是0,那么求解下一列。
多解的情况就是矩阵的秩小于未知量的个数,因为那些未知量可以取任意的值。
没有解就是得出秩行下面如果某个最后的常数不是0,那么就是无解,因为没有0=m这样的解。 代码如下:
#include <iostream>
#include <string.h>
#include <string>
#include <map>
using namespace std; int ma[][],n,m;
int arr[],ans;
map<string,int> mp;
int solve()
{
int i,j,k=,l,tmp,num=,sum;
for(i=;i<=m&&k<=n;++i){ //这里i是当前第i行,k是当前第k列
for(j=i;j<=m;++j) //找一个k列不是0的行
if(ma[j][k])
break;
if(j>m){ //找不到那么就处理下一个未知量
--i;
++k;
continue;
}
if(j!=i){
swap(ma[i],ma[j]);
}
for(j=i+;j<=m;++j){
if(!ma[j][k])
continue;
tmp=ma[j][k];//!!!这里WA了,因为一开始没有保存ma[j][k]的值,如果你不保存那么ma[j][k]通过下面会变成0
for(l=k;l<=n+;++l){
ma[j][l]=ma[i][l]*tmp-ma[j][l]*ma[i][k];
ma[j][l]=(ma[j][l]%+)%;
}
}
++num;
++k;
}
sum=;
for(i=num+;i<=m;++i) //找是否会无解
if(ma[i][n+])
return ;
if(num!=n) //多解
return ; for(i=n;i;--i){ //唯一解
for(j=i+;j<=n;++j){
ma[i][n+]=ma[i][n+]-arr[j]*ma[i][j];
ma[i][n+]=(ma[i][n+]%+)%;
}
arr[i]=;
for(j=;j<=;++j)
if(ma[i][i]*j%==ma[i][n+])
arr[i]=j;
}
return ;
}
int main(){
ios::sync_with_stdio();
mp["MON"]=;
mp["TUE"]=;
mp["WED"]=;
mp["THU"]=;
mp["FRI"]=;
mp["SAT"]=;
mp["SUN"]=;
while(cin>>n>>m,n+m){
int k,x;
string s1,s2;
memset(ma,,sizeof ma);
for(int i=;i<=m;++i){
cin>>k;
cin>>s1>>s2;
ma[i][n+]=(mp[s2]-mp[s1]++)%;
while(k--){
cin>>x;
ma[i][x]++;
ma[i][x]%=;
}
}
ans=solve();
if(ans==)
cout<<"Inconsistent data."<<endl;
else if(ans==)
cout<<"Multiple solutions."<<endl;
else
for(int i=;i<=n;++i)
cout<<arr[i]<<" \n"[i==n];
}
return ;
}

POJ2947-Widget Factory的更多相关文章

  1. [Gauss]POJ2947 Widget Factory

    题意: 有n种小工具要加工,每种工具的加工时间为3到9天,给了m条加工记录.  每条记录 X $s_1$ $s_2$ 分别代表 这个工人在$s_1$到$s_2$(前闭后闭)的时间里加工了X件小工具   ...

  2. POJ 2947 Widget Factory(高斯消元)

    Description The widget factory produces several different kinds of widgets. Each widget is carefully ...

  3. 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)

    使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins) Note 这一章节的内容是基于 Scott Gonzalez 一篇博客 Building ...

  4. poj 2947 Widget Factory

    Widget Factory 题意:有n件装饰品,有m组信息.(1 <= n ,m<= 300)每组信息有开始的星期和结束的星期(是在mod 7范围内的)并且还包括num种装饰品的种类(1 ...

  5. Widget Factory (高斯消元解线性方程组)

    The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...

  6. 软件公司的两种管理方式 总体来说,这个世界上存在两种不同的软件公司的组织结构。我把他们叫做 Widget Factory(小商品工厂) 和 Film Crews(电影工作组

    软件公司的两种管理方式 一个简单的回答应该是——“因为在我们的社会里,我们总是会认为薪水和会和职位的层次绑在一起”.但是,这个答案同时也折射出一个事实——我们的薪资是基于我们的所理解的价值,但这并没有 ...

  7. 通过扩展jQuery UI Widget Factory实现手动调整Accordion高度

    □ 实现Accordion高度一致 <head> <meta name="viewport" content="width=device-width&q ...

  8. 【POJ】2947 Widget Factory(高斯消元)

    http://poj.org/problem?id=2947 各种逗啊..还好1a了.. 题意我就不说了,百度一大把. 转换为mod的方程组,即 (x[1,1]*a[1])+(x[1,2]*a[2]) ...

  9. POJ Widget Factory 【求解模线性方程】

    传送门:http://poj.org/problem?id=2947 Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Su ...

  10. UVA 1564 - Widget Factory(高斯消元)

    UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...

随机推荐

  1. dubbo协议报文格式

  2. ArrayList 加强版的数组

    ArrayList 泛型类. 描述:可以自动扩容的数组. 特点:插入和删除慢,查找快. 现在来创建一个 要放String的ArrayList ArrayList list = new ArrayLis ...

  3. Sprite/MovieClip的Enter_Frame事件,不受addChild/removeChild影响

    简单点讲:Sprite或MovieClip对象一旦为其添加了Enter_Frame事件监听,对应的Enter_Frame处理函数将会马上被调用,并一直执行下去(不管你是否将其addChild到显示列表 ...

  4. Pandas透视表和交叉表

    透视表 参数名 说明 values 待聚合的列的名称.默认聚合所有数值列 index 用于分组的列名或其他分组键,出现在结果透视表的行 columns 用于分组的列表或其他分组键,出现在结果透视表的列 ...

  5. d3.js 平移缩放

    rt 记录一下 var zoom = d3.zoom() .scaleExtent([0.1,10]) .on("zoom", zoomed); function zoomed() ...

  6. gooflow学习笔记

    前端jqury脚本实现流程设计,兼容目前主流浏览器 gooflow 默认属性节点只有:id,name,top,left,width,height,type (各个版本不同,属性节点有所增加),但是这些 ...

  7. scrapy 爬取斗罗大陆漫画

    # -*- coding: utf-8 -*- import scrapy import json import os import urllib import time from scrapy.ht ...

  8. debian proftpd安装

  9. 面试简单整理之mybatis

    125.mybatis 中 #{}和 ${}的区别是什么? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解 ...

  10. hashmap源码研究

    概述 在官方文档中是这样描述HashMap的: Hash table based implementation of the Map interface. This implementation pr ...