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

血泪史:

CE:poj的string类型要加string库,swap不能直接交换数组

WA:

x[m-1]也有可能<3啊O(≧口≦)O

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; const int mod=; int n,m;
char ch[][] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; int a[][];
int x[]; int inv[]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int getgcd(int a,int b) { return !b ? a : getgcd(b,a%b); } int getlcm(int a,int b) { return a*b/getgcd(a,b); } void preinv()
{
inv[]=;
for(int i=;i<=;++i) inv[i]=(-mod/i*inv[mod%i]%mod+mod)%mod;
} int gauss()
{
int equ=n,var=m;
int i,j,k;
int max_r,col;
int ta,tb,lcm;
int tmp;
for(k=,col=;k<equ && col<var;++k,++col)
{
max_r=k;
for(i=k+;i<equ;++i)
if(abs(a[i][col])>abs(a[max_r][col])) max_r=i;
if(!a[max_r][col]) { --k; continue; }
if(k!=max_r)
for(j=col;j<var+;++j) swap(a[k][j],a[max_r][j]);
for(i=k+;i<equ;++i)
if(a[i][col])
{
lcm=getlcm(abs(a[i][col]),abs(a[k][col]));
ta=lcm/abs(a[i][col]);
tb=lcm/abs(a[k][col]);
if(a[i][col]*a[k][col]<) tb=-tb;
for(j=col;j<var+;++j) a[i][j]=((a[i][j]*ta-a[k][j]*tb)%mod+mod)%mod;
}
}
for(int i=k;i<equ;++i)
if(a[i][var]) return -;
if(k<var) return -;
for(int i=var-;i>=;--i)
{
tmp=a[i][var];
for(j=i+;j<var;++j)
if(a[i][j])
{
tmp-=a[i][j]*x[j];
tmp=(tmp%mod+mod)%mod;
}
x[i]=tmp*inv[a[i][i]]%mod;
}
return ;
} int turn(char *c)
{
for(int i=;i<;++i)
if(!strcmp(c,ch[i])) return i+;
} int main()
{
int k,xi;
char c[];
int s,t;
preinv();
while(scanf("%d%d",&m,&n)!=EOF)
{
if(!m) return ;
memset(a,,sizeof(a));
for(int i=;i<n;++i)
{
read(k);
scanf("%s",c);
s=turn(c);
scanf("%s",c);
t=turn(c);
a[i][m]=(t-s++)%;
while(k--)
{
read(xi);
a[i][xi-]++;
}
}
for(int i=;i<n;++i)
for(int j=;j<m;++j)
a[i][j]%=mod;
int ans=gauss();
if(ans==-) puts("Inconsistent data.");
else if(ans==-) puts("Multiple solutions.");
else
{
for(int i=;i<m;++i)
{
if(x[i]<) x[i]+=;
printf("%d%c",x[i],i==m- ? '\n' : ' ');
}
}
}
}

poj 2947 Widget Factory (高斯消元解同余方程组+判断无解、多解)的更多相关文章

  1. Poj 2947 widget factory (高斯消元解同模方程)

    题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...

  2. POJ 2947 2947 Widget Factory 高斯消元

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

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

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

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

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

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

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

  6. poj 2947 Widget Factory

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

  7. POJ 1830 开关问题 高斯消元,自由变量个数

    http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...

  8. A - The Water Bowls POJ - 3185 (bfs||高斯消元)

    题目链接:https://vjudge.net/contest/276374#problem/A 题目大意:给你20个杯子,每一次操作,假设当前是对第i个位置进行操作,那么第i个位置,第i+1个位置, ...

  9. POJ 1166 The Clocks 高斯消元 + exgcd(纯属瞎搞)

    依据题意可构造出方程组.方程组的每一个方程格式均为:C1*x1 + C2*x2 + ...... + C9*x9 = sum + 4*ki; 高斯消元构造上三角矩阵,以最后一个一行为例: C*x9 = ...

随机推荐

  1. SpringBoot日记——MQ消息队列整合(二)

    基于第一篇文章搭建好环境以后,我们这篇文章继续介绍如何在springboot中使用RabbitMQ. 1).单播:添加好pom文件和自定义配置后,来看: @Autowired RabbitTempla ...

  2. Postman安装与入门使用

    Postman官方下载地址:https://www.getpostman.com/apps Postman 是一个很强大的 API调试.Http请求的工具.我们可以用来很方便的模拟get或者post或 ...

  3. wordpress 5.1 后台拿shell

    闲着没事搭建了一套最新版wordpress 5.1,本身wordpress后台安全防御是比较差的,想尝试下后台是否可以拿shell. 再上传插件的地方可以直接上传php文件,并且该文件可以执行: sh ...

  4. 一张图理解Git

    更详细的git介绍:Git操作指南

  5. 决胜 Poker

    团队展示 队名 决胜 Poker 团队人员 211606392 郑俊瑜 (队长) 211606355 陈映宏 211606358 陈卓楠 211606386 姚皓钰 211606323 刘世华 211 ...

  6. 20135119_涂文斌 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实  验  报  告 课程: Java        班级:1351           姓名:涂文斌          学号:20135119 成绩:         ...

  7. Linux内核分析:完成一个简单的时间片轮转多道程序内核代码

    PS.贺邦   原创作品转载请注明出处  <Linux内核分析>MOOC课程    http://mooc.study.163.com/course/USTC-1000029000 1.m ...

  8. Linux内核分析——第八周学习笔记

    实验作业:进程调度时机跟踪分析进程调度与进程切换的过程 20135313吴子怡.北京电子科技学院 [第一部分]理解Linux系统中进程调度的时机 1.Linux的调度程序是一个叫schedule()的 ...

  9. JavaScript编码命名规范及格式规范

    变量 局部变量命名采用首字母小写,其它单词首字母大写: //推荐 var printContent = 'hello world' //不推荐,变量名意义不明确 var objext = {}; // ...

  10. C语言版本:循环单链表的实现

    SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...