POJ2947-Widget Factory
工厂里每件期间的生产时间为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的更多相关文章
- [Gauss]POJ2947 Widget Factory
题意: 有n种小工具要加工,每种工具的加工时间为3到9天,给了m条加工记录. 每条记录 X $s_1$ $s_2$ 分别代表 这个工人在$s_1$到$s_2$(前闭后闭)的时间里加工了X件小工具 ...
- POJ 2947 Widget Factory(高斯消元)
Description The widget factory produces several different kinds of widgets. Each widget is carefully ...
- 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins) Note 这一章节的内容是基于 Scott Gonzalez 一篇博客 Building ...
- poj 2947 Widget Factory
Widget Factory 题意:有n件装饰品,有m组信息.(1 <= n ,m<= 300)每组信息有开始的星期和结束的星期(是在mod 7范围内的)并且还包括num种装饰品的种类(1 ...
- Widget Factory (高斯消元解线性方程组)
The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...
- 软件公司的两种管理方式 总体来说,这个世界上存在两种不同的软件公司的组织结构。我把他们叫做 Widget Factory(小商品工厂) 和 Film Crews(电影工作组
软件公司的两种管理方式 一个简单的回答应该是——“因为在我们的社会里,我们总是会认为薪水和会和职位的层次绑在一起”.但是,这个答案同时也折射出一个事实——我们的薪资是基于我们的所理解的价值,但这并没有 ...
- 通过扩展jQuery UI Widget Factory实现手动调整Accordion高度
□ 实现Accordion高度一致 <head> <meta name="viewport" content="width=device-width&q ...
- 【POJ】2947 Widget Factory(高斯消元)
http://poj.org/problem?id=2947 各种逗啊..还好1a了.. 题意我就不说了,百度一大把. 转换为mod的方程组,即 (x[1,1]*a[1])+(x[1,2]*a[2]) ...
- POJ Widget Factory 【求解模线性方程】
传送门:http://poj.org/problem?id=2947 Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Su ...
- UVA 1564 - Widget Factory(高斯消元)
UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...
随机推荐
- Linux安装jdk.18和tomcat8
JDK1.8的安装 第一步:下载JDK1.8 1.百度搜索jdk1.8,打开属于oracle官网的搜索结果项 2.先点击接受协议选项,然后选择要下载的64位linux版本jdk,直接单击通过浏览器下载 ...
- vue axios跨域
现在应用都是前后端分离,这也造成前端在调用接口时出现跨域问题,在控制台会这样提示 ,如果有类似于此图的提示,就已经表明你的接口调用出现了跨域问题,此文章是我对于vue跨域其中一种方式的一些经验,如果错 ...
- VirtualBox 休眠恢复后无法联网解决办法
环境:lubuntu 首先ifconfig查看网卡名,我这里是enp0s3. 接着: sudo ifconfig enp0s3 down sudo ifconfig enp0s3 up sudo dh ...
- sqlserver 收缩数据库/文件
/******************************/ 1.右键-属性-选项-简单模式 2.右键-任务-收缩-文件 3.右键-任务-收缩-数据库 /********************* ...
- C# 木马功能的简单实现
1.首先解决开机启动木马.通过建立开机启动服务达到目的:2.伪装问题.通过c#反射性能,将正常的.net的exe文件添加监控盗传播取等其他功能,执行正常程序同时,后台悄悄释放windows服务,通过服 ...
- mysql学习笔记--数据库索引
一.索引的优点:查询速度快 二.索引的缺点: 1. 增.删.改(数据操作语句)效率低了 2. 索引占用空间 三.索引类型: 1. 普通索引 2. 唯一索引(唯一键) 3. 主键索引:只要主键就自动创建 ...
- openal在vs2010中的配置
下载openal开发工具:相关资料可以在OpenAL官网http://connect.creativelabs.com/openal/default.aspx上获得.这里下载的SDK为OpenAL11 ...
- 通信导论-IP数据网络基础(4)
IP地址的编址方法--IP地址+掩码地址=网络地址 分类的IP地址 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,标志主机或路由器所连接到的网络,另一个字段则是主机号 ho ...
- Android 8.0+ 通知不显示的适配
最近在 写项目的时候 发现 通知并不会显示的问题,查看资料发现 从Android 8.0开始通知必须加上ChannelId Android O 引入了 通知渠道(Notification Chann ...
- Java几种常用JSON库性能比较
本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能. 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才是最值得相信的. JSON ...