题目连接:

  http://poj.org/problem?id=2947

题目大意:

  有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同种类,也可以不同种类),问每种零件生产一个出来需要的时间?

解题思路:

  给出的时间段是从周几到周几,并没有给出具体的时间段,因此在计算过程中要进行取模,还有就是对每个零件要在题目要求的范围内进行枚举。

ps:如果求出来的增广矩阵是n*n的,但是某个零件在[3,9]之间没有合理的解,也是无解的。

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = ;
int det[maxn][maxn], res[maxn], var, equ;
char str[][] = {"","MON", "TUE", "WED", "THU", "FRI", "SAT" , "SUN"};
int Day (char s[])
{
for (int i=; i<; i++)
if (strcmp(s, str[i]) == )
return i;
}
int gauss ()
{
int col, k;
for (k=col=; k<equ&&col<var; k++, col++)
{
int Max_i = k;
for (int i=k+; i<equ; i++)
if (abs(det[i][col]) > abs(det[Max_i][col]))
Max_i = i;
if (Max_i != k)
for (int i=col; i<=var; i++)
swap (det[k][i], det[Max_i][i]);
if (det[k][col] == )
{
k --;
continue;
}
for (int i=k+; i<equ; i++)
if (det[i][col])
{
int x = det[i][col];
int y = det[k][col];
for (int j=col; j<=var; j++)
det[i][j] = ((det[i][j]*y - det[k][j]*x) % + ) % ;
}
}
int temp = , i, j;
for (i=; i<equ; i++)
{
for (j=; j<var; j++)
if (det[i][j])
break;
if (j == var)
{
if (det[i][j])
return ;//增广矩阵无解
else if (i < var)//增广矩阵存在不确定变元
temp ++;
}
}
if (temp || var > equ)
return ;//增广矩阵存在不确定变元 for (i=var-; i>=; i--)
{
temp = ;
for (j=i+; j<var; j++)
temp = (temp + det[i][j] * res[j]) % ;
for (j=; j<; j++)//枚举每个零件的加工时长
if ((temp + det[i][i]*j)% == det[i][var])
{
res[i] = j;
break;
}
if (j == )//当有某个零件的加工时长不在[3,9]之间,则不符合题意,无解
return ;
}
return ;
}
int main ()
{
while (scanf ("%d %d", &var, &equ), var+equ)
{
int k, x;
char st[maxn], et[maxn];
memset (det, , sizeof(det));
for (int i=; i<equ; i++)
{
scanf ("%d %s %s", &k, st, et);
while (k --)
{
scanf ("%d", &x);
det[i][x-] ++;
}
det[i][var] = Day(et) - Day(st) + ;
}
for (int i=; i<equ; i++)//这里一定要去次余,如果det[i][j]是7的倍数,在划成阶梯阵的过程中很有可能会错
for (int j=; j<=var; j++)
det[i][j] = (det[i][j] % + ) % ;
int ans = gauss();
if (ans == )
printf ("Inconsistent data.\n");
else if (ans == )
printf ("Multiple solutions.\n");
else
for (int i=; i<var; i++)
printf ("%d%c", res[i], i==var-?'\n':' ');
}
return ;
}

Poj 2947 widget factory (高斯消元解同模方程)的更多相关文章

  1. POJ 2947 2947 Widget Factory 高斯消元

    给出组件的数量n,给出记录的数量m(n就是变元数量,m是方程数量).每一个记录代表一个方程,求每个组件的生产天数. 高斯消元即可 #include <cstdio> #include &l ...

  2. POJ2947Widget Factory(高斯消元解同模方程)

    http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...

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

    题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...

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

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

  5. poj2947(高斯消元解同模方程组)

    题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...

  6. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

  7. poj1753(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...

  8. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

  9. [置顶] hdu 4418 高斯消元解方程求期望

    题意:  一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...

随机推荐

  1. 你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池

    你创建线程池最好分为两种线程池,io密集型线程池,或者cpu密集型线程池. 否则,如果只用一个线程池的话,不管是iO密集的线程,或者cpu消耗大的都放在同一个线程池的话,会发生线程池被撑满的情况

  2. ThoughtWorks技术雷达

    ThoughtWorks技术雷达 技术成熟方案的一个推荐网站.

  3. hdoj 5093 Battle ships 【二分图最大匹配】

    题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...

  4. MySQL存储结构的使用

    前言 今天公司老大让我做一个MySQL的调研工作,是关于MySQL的存储结构的使用.这里我会通过3个样例来介绍一下MySQL中存储结构的使用过程,以及一些须要注意的点. 笔者环境 系统:Windows ...

  5. grep命令使用技巧

    grep如何实现全词查找例如:要查找name这个单词,反馈的查找结果不能包含namespace这样的模式,但是可以包含name()这样的模式,即要查找的单词两端不可以有其他的数字或者字母,但可以有空格 ...

  6. 5 微信票据 access_token--开发微信的第二道坎儿

    一 access_token基本概念 定义:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存. 时效性:access_ ...

  7. Linux IO 多路复用是什么意思?

    写在前面:本文整理于知乎,原文链接为http://www.zhihu.com/question/32163005/answer/55772739,作者:罗志宇 再次向作者表示感谢~~ 假设你是一个机场 ...

  8. vs2010中设置qt环境的智能识别方案

    Qt搭建请参考:Win7系统VS2010下搭建qt开发环境 搭建好之后,虽然可以编译过去,但是写代码时,编辑器无法识别,也没有智能提示,并且代码中都是红色的提示如下: 此时需要设置一下include路 ...

  9. POJ2112 Optimal Milking —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-2112 Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

  10. YTU 1010: 目标柏林

    1010: 目标柏林 时间限制: 1000 Sec  内存限制: 64 MB 提交: 32  解决: 15 题目描述 1945年初,苏军和英美联军已从东西两面攻入德国国境. 4月初,在苏军和英美联军的 ...