这几把题意我感觉很变态啊,题意:https://blog.csdn.net/qingshui23/article/details/52511894

#include <iostream>// 用G++,还有就是不能外挂
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
//#define IO  ios::sync_with_stdio(false),cin.tie(0), cout.tie(0);
//#pragma comment(linker, "/STACK:1024000000,1024000000")
void ex_gcd(int a, int b, int &d, int &x, int &y) { if (!b) { x = 1; y = 0; d = a; } else { ex_gcd(b, a%b, d, y, x); y -= x * (a / b); }; }
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int lcm(int a,int b){return a/gcd(a,b)*b;}//先除后乘防溢出
int inv_exgcd(int a, int m) { int d, x, y;ex_gcd(a, m, d, x, y);return d == 1 ? (x + m) % m : -1; }
typedef long long ll;
const int maxn=1e3;
using namespace std;
int a[maxn][maxn];
int x[maxn];
int n,m;
map<string,int>Mon;
bool free_x[maxn];//记录不确定的变元
void IN()
{Mon["MON"]=1,Mon["TUE"]=2,Mon["WED"]=3;Mon["THU"]=4,Mon["FRI"]=5,Mon["SAT"]=6,Mon["SUN"]=7;
}
int Gauss(int equ,int var)
{int max_r,col,k;int ta,tb;int Lcm;int temp;int free_x_num=0,free_index;for(int i=0;i<=var;++i) x[i]=0,free_x[i]=true;//转化为阶梯例col=0;//当前列for( k=0,col=0;k<equ&&col<var;++k,++col){//枚举当前行max_r=k;for(int i=k+1;i<equ;++i)if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;if(max_r!=k)for(int i=k;i<=var;++i) swap(a[k][i],a[max_r][i]);///i=0;if(!a[k][col]){k--;continue;//处理下一列}for(int i=k+1;i<equ;++i){//化为阶梯型if(a[i][col]){Lcm=lcm(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]<0)tb=-tb;for(int j=col;j<=var;++j){a[i][j]=((a[i][j]*ta-a[k][j]*tb)%7+7)%7;}}}}for(int i=k;i<equ;++i)// 无解if(a[i][col]) return -1;if(k<var)// 无穷解{///这这儿可以直接 return var-k;不用求出未知元for(int i=k-1;i>=0;--i){free_x_num=0;//用于判断不确定性变元的数量,若超过一个仍然无法求解(无解)for(int j=0;j<var;++j)if(a[i][j]&&free_x[j])free_x_num++,free_index=j;if(free_x_num>1)continue;temp=a[i][var];for(int j=0;j<var;++j){if(a[i][j]&&j!=free_x_num)temp=((temp-a[i][j]*x[j])%7+7)%7;;}x[free_index]=(temp/a[i][free_index])%7;free_x[free_index]=false;}return var-k;}//唯一解for(int i=var-1;i>=0;--i){temp=a[i][var]%7;for(int j=i+1;j<var;++j)if(a[i][j])temp=((temp-a[i][j]*x[j])%7+7)%7;//cout<<temp<<endl;// if(temp%a[i][i])return -2;//有浮点数解, 说明下一行的temp/a[i][i]不是整数,也是有道理的// x[i]=(temp/a[i][i])%7;int d=inv_exgcd(a[i][i],7); if(d==-1)return -2; ///当逆元=-1是也是无整数解(求逆元又必须是互质的情况下)x[i]=temp*d%7;if(x[i]<3)x[i]+=7;if(x[i]>9)x[i]%=7;}return 0;
}
void init()
{memset(a,0,sizeof(a));int p,equ=m,var=n,pi;char s[10],e[10];for(int i=0;i<m;++i){scanf("%d%s %s",&p,s,e);a[i][var]=(Mon[e]-Mon[s]+1+7)%7;a[i][var]=(a[i][var]+7)%7;for(int j=0;j<p;++j){scanf("%d",&pi);a[i][pi-1]=(a[i][pi-1]+1)%7;}}
}
int main()
{//IO;IN();while(scanf("%d%d",&n,&m)&&(n||m)){init();int free_num=Gauss(m,n);if(free_num==-1)printf("Inconsistent data.\n");else if(free_num==-2)printf("有浮点数解无整数解");else if(free_num>0)printf("Multiple solutions.\n");else{printf("%d",x[0]);for(int i=1;i<n;++i)printf(" %d",x[i]);puts("");}}
}

poj 2947 Widget Factory相关推荐

  1. POJ 2947 Widget Factory (高斯消元解同余方程组)

    题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...

  2. POJ 2847 Widget Factory

    POJ_2947 将M条信息翻译成同余方程组后用高斯消元求解就可以了. #include<stdio.h> #include<string.h> #include<ios ...

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

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

  4. POJ 2393 Yogurt factory(贪心)

    总时间限制: 1000ms 内存限制: 65536kB 描述 The cows have purchased a yogurt factory that makes world-famous Yuck ...

  5. 林大陈宇老师的原创高斯

    最后1 行,有x4=b4; 第3 行: x4+x3=b3,已经求出x4=b4 了,带入第3 行,可求出x3;同理,把x4 x3 带入 第2 行,还可求出x2;把x4 x3 x2 带入到第1 行,可求出 ...

  6. 高斯消元法java语言设计_高斯消元法(Gauss Elimination)【超详解模板】

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵. 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程 ...

  7. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

  8. 编写jQueryUI插件(widget)

    使用jQueryUI的widget来写插件,相比于基本的jquery插件有一些好处: * 方便实现继承,代码重用 * 默认是单例 * widget已经给你实现好的一些常用方法,例如destroy 带来 ...

  9. jQuery ui widget和jQuery plugin的实现原理简单比较

    一.创建 1.  jQuery plugin (function($){ $.fn.MyPlugin=function(){ //js代码 } })(jQuery) 为了与页面上其他代码友好相处,将p ...

最新文章

  1. 黄雷:展开数据的翅膀,在更宽广的路上飞驰人生 | 提升之路系列(三)
  2. asp.net获取ip
  3. php和python哪个工资高-python工资高还是java?
  4. Graves of the Internet - 互联网坟墓
  5. 99%的数据工作者不曾知道的一款利器
  6. DCMTK:CT采集类型FG类的测试
  7. 红米Note增强版出现”无法安装xxx ,请释放一些存储空间并重试“解决
  8. 计算机辅助诊断系统的应用,AI医疗影像辅助诊断系统
  9. 前端学习(555):margin与容器的尺寸
  10. 获取Android Studio的Sha1
  11. 数据挖掘二手车价格预测 Task05:模型融合
  12. 树状数组的讲解感觉挺好,和我的一维,二维,树状数组的模板,希望对大家有用
  13. mysql sjis 校对乱码_mysql 解决中文乱码问题
  14. Pyserial文件传输
  15. gdi与gdi+绘图效率_.NET和GDI +进行绘图[第1部分:基础知识]
  16. UEBA在信息安全领域的使用
  17. 好消息!!!XMind出视频教程了
  18. TOJ 3436: 相邻数
  19. VPX高速信号处理板设计资料第240篇:4C6678_K7_DDR3_VPX高速信号处理板
  20. RN8215芯片 32768Hz晶体停振案例分析

热门文章

  1. HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
  2. int.TryParse的使用
  3. 2.12.ECMAScript--运算符
  4. 高通camera驱动分析
  5. 如何将dtb反编译成dts
  6. clone下来的代码push到自己的远程仓库中
  7. 电梯维修属于什么服务器,电梯维修属于建筑服务中的修缮服务吗?
  8. 对比Javascript和TypeScript
  9. 【代码审计】使用SonarQube进行代码质量分析管理
  10. 我的2017年文章汇总——Java及中间件篇