POJ 2947 2947 Widget Factory 高斯消元
给出组件的数量n,给出记录的数量m(n就是变元数量,m是方程数量)。每一个记录代表一个方程,求每个组件的生产天数。
高斯消元即可
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
using namespace std; const int MOD = 7;
const int MAXN = 310;
int a[MAXN][MAXN], x[MAXN]; void debug(int n, int m)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
printf("%d ", a[i][j]);
printf(" %d\n", a[i][m]);
}
puts("**************************************************************");
} int gcd(int a,int b) //递归算法
{
return b ? gcd(b, a%b) : a;
} int lcm(int a, int b)
{
return a*b/gcd(a,b);
} int Guass(int equ,int var)
{
// debug(equ, var);
int row,col;
row=col=0;
while(row<equ && col<var)
{
//列非零主
int r=row;
for(int i=row; i<equ; i++)
if(a[i][col]!=0)
{
r=i;
break;
}
if(r!=row)
{
for(int j=col; j<var+1; j++)
swap(a[row][j],a[r][j]);
}
if(a[row][col]==0)//说明有自由变元
{
col++;
continue;
}
//消元
for(int i=row+1; i<equ; i++)
{
if(a[i][col]==0) continue;
int l = lcm(a[row][col],a[i][col]);
int ta = l/a[row][col];
int tb = l/a[i][col];
for(int j=col; j<var+1; j++)
a[i][j] = ((tb*a[i][j] - ta*a[row][j]) % MOD + MOD) %MOD;
}
// debug(equ, var);
row++;
col++;
}
for(int i=row; i<equ; i++)
if(a[i][var]!=0) return -1;
if(row < var) return 1;
for(int i=row-1; i>=0; i--)
{
int tmp = a[i][var];
for(int j=i+1; j<var; j++)
tmp = ((tmp - x[j]*a[i][j])%MOD + MOD)%MOD;
while(tmp%a[i][i]) tmp += MOD;
x[i] = tmp/a[i][i]%MOD;
}
return 0;
} int main()
{
// freopen("in.txt", "r", stdin);
int n,m;
map<string, int>mp;
mp["MON"] = 1, mp["TUE"] = 2, mp["WED"] = 3;
mp["THU"] = 4, mp["FRI"] = 5, mp["SAT"] = 6, mp["SUN"] = 7;
while(~scanf("%d%d", &n, &m)) //n个变元,m个方程
{
memset(a, 0, sizeof(a));
if(n == 0 && m == 0) break;
for(int i=0; i<m; i++)
{
int k;
char s1[5], s2[5];
scanf("%d", &k);
scanf("%s%s", s1, s2);
a[i][n] = (mp[s2]-mp[s1]+1+MOD)%MOD;
while(k--)
{
int t;
scanf("%d", &t);
a[i][t-1]++;
a[i][t-1] %= MOD;
}
}
int res = Guass(m, n);
if(res == -1)
puts("Inconsistent data.");
else if(res == 1)
puts("Multiple solutions.");
else
{
for(int i=0; i<n; i++)
if(x[i]<3) x[i] += MOD;
for(int i=0; i<n; i++)
printf("%d%c", x[i], i==n-1?'\n':' ');
}
}
return 0;
}
POJ 2947 2947 Widget Factory 高斯消元的更多相关文章
- Poj 2947 widget factory (高斯消元解同模方程)
题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...
- POJ 1681---Painter's Problem(高斯消元)
POJ 1681---Painter's Problem(高斯消元) Description There is a square wall which is made of n*n small s ...
- POJ 2947-Widget Factory(高斯消元解同余方程式)
题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...
- POJ2947Widget Factory(高斯消元解同模方程)
http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...
- POJ 1830 开关问题(高斯消元)题解
思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...
- POJ 1222【异或高斯消元|二进制状态枚举】
题目链接:[http://poj.org/problem?id=1222] 题意:Light Out,给出一个5 * 6的0,1矩阵,0表示灯熄灭,反之为灯亮.输出一种方案,使得所有的等都被熄灭. 题 ...
- POJ 1830 开关问题(高斯消元求解的情况)
开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8714 Accepted: 3424 Description ...
- POJ 1753 Flip Game(高斯消元+状压枚举)
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45691 Accepted: 19590 Descr ...
- POJ 3185 The Water Bowls (高斯消元)
题目链接 题意:翻译过来就是20个0或1的开关,每次可以改变相邻三个的状态,问最小改变多少次使得所有开关都置为0,题目保证此题有解. 题解:因为一定有解,所以我们可以正序逆序遍历两次求出较小值即可.当 ...
随机推荐
- BRAM 和 DRAM 区别
转载: BRAM和DRAM的区别 Xilinx的FPGA开发板可以直接调用RAM,其中包括了BRAM和DRAM.经过网上查找资料发现,这两者的区别在于: 选择distributed memory ge ...
- k8s滚动更新(8)
一.k8s版本更新 滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新.滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 实践:部署 ...
- python基础之迭代器、生成器、装饰器
一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...
- tkinter是内置的模块,不同的版本的导入形式不同,现总结如下
#coding=utf-8 import os, sys try: from tkinter import * except ImportError: #Python 2.x PythonVersio ...
- 1、大数据 Hadoop配置和单机Hadoop系统配置
#查看服务器ip ip add #设置主机名称 hostnamectl set-hostname master bash #查看 hostname #绑定ip vi /etc/hosts 添加 服务器 ...
- 【遥感数字图像处理实验】Erdas版详细图文实验教程(8实验全)
@ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 遥感数字图像的处理,是对遥感数字图像的计算机处理.与工业和医学数字图像不同,遥感数字图像类型更为多样,内容更为复杂.因此,遥感 ...
- HDFS 05 - HDFS 的元数据管理(FSImage、EditLog、Checkpoint)
目录 1 - NameNode 的启动流程 2 - NameNode 的元数据 2.1 EditLog 操作日志 2.2 查看 EditLog 文件 2.3 FSImage 元数据镜像 2.4 查看 ...
- Rabbitmqpool
import pika import threading import random import uuid import json # 框架模块 from django.conf import se ...
- double类型数据有的时候null的判断
double不是Double,无法通过 == null来判断 如何进行double的null判断呢 double avg = avg.getValue() // 此时不会报错 // 通过如下进行判断 ...
- ADAS可行驶区域道路积水反光区域的识别算法
ADAS可行驶区域道路积水反光区域的识别算法 Water logging area reflecting recognition algorithm for ADAS 1. 工程概要 1.1 概述: ...