【poj2947】高斯消元求解同模方程组【没有AC,存代码】
题意:
p start end
a1,a2......ap (1<=ai<=n)
第一行表示从星期start 到星期end 一共生产了p 件装饰物(工作的天数为end-start+1+7*x,
加7*x 是因为它可能生产很多周),第二行表示这p 件装饰物的种类(可能出现相同的种类,
即ai=aj)。规定每件装饰物至少生产3 天,最多生产9 天。问每种装饰物需要生产的天数。
如果没有解,则输出“Inconsistent data.”,如果有多解,则输出“Multiple solutions.”,如果
只有唯一解,则输出每种装饰物需要生产的天数。
的天数为b,则可以列出下列方程:
a1*x1+a2*x2+...an*xn = b (mod 7)
这样一共可以列出m个方程式,然后使用高斯消元来解。
int gauss(int n,int m)
{
int i,j,k,l,r;
for(i=,j=;j<=maxx(n,m-);j++)
{
r=i;
for(k=i+;k<=n;k++)
if(myabs(a[k][j])>myabs(a[r][j])) r=k;
if(a[r][j])
{
for(l=;l<=m;l++) swap(a[r][l],a[i][l]);
for(l=i+;l<=n;l++)
{
if(a[l][j])
{
int x=lcm(a[l][j],a[i][j]);
int la=x/a[i][j];
int lb=x/a[l][j];
for(k=i;k<=m;k++)
{
a[l][k]=((a[l][k]*lb-a[i][k]*la)%mod+mod)%mod;
}
}
}
i++;
}
}
// output(n,m);printf("i = %d\n",i);
for(j=minn(i,m);j<=n;j++)
if(a[j][m]) return -;//无解
if((i-)<(m-)) return ;//有无穷解
//求解唯一解(不能除,求逆元)
int b;
for(i=m-;i>=;i--)
{
for(j=i+;j<m;j++)
a[i][m]=((a[i][m]-a[j][m]*a[i][j])%mod+mod)%mod;
b=quickpow(a[i][i],mod-,mod);
a[i][m]=(a[i][m]*b)%mod;
if(a[i][m]<) a[i][m]+=mod;
}
return ;
}
代码:我真的不知道为什么wa了。。拍了一百年了。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std; const int N=;
const int mod=;
int a[N][N];
char s1[],s2[]; void output(int n,int m)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
} int myabs(int x){return x> ? x:-x;}
int minn(int x,int y){return x<y ? x:y;}
int maxx(int x,int y){return x>y ? x:y;} int idx(char s[])
{
if(s[]=='M') return ;
if(s[]=='T' && s[]=='U') return ;
if(s[]=='W') return ;
if(s[]=='T' && s[]=='H') return ;
if(s[]=='F') return ;
if(s[]=='S' && s[]=='A') return ;
return ;
} int gcd(int x,int y)
{
if(y==) return x;
return gcd(y,x%y);
} int quickpow(int x,int y,int mod)
{
int ans=;
while(y)
{
if(y&) ans=(ans*x)%mod;
x=x*x;
y/=;
}
return ans;
} int lcm(int x,int y)
{
if(!x && !y) return ;
return x*y/gcd(x,y);
} int gauss(int n,int m)
{
int i,j,k,l,r;
for(i=,j=;j<=maxx(n,m-);j++)
{
r=i;
for(k=i+;k<=n;k++)
if(myabs(a[k][j])>myabs(a[r][j])) r=k;
if(a[r][j])
{
for(l=;l<=m;l++) swap(a[r][l],a[i][l]);
for(l=i+;l<=n;l++)
{
if(a[l][j])
{
int x=lcm(a[l][j],a[i][j]);
int la=x/a[i][j];
int lb=x/a[l][j];
for(k=i;k<=m;k++)
{
a[l][k]=((a[l][k]*lb-a[i][k]*la)%mod+mod)%mod;
}
}
}
i++;
}
}
// output(n,m);printf("i = %d\n",i);
for(j=minn(i,m);j<=n;j++)
if(a[j][m]) return -;//无解
if((i-)<(m-)) return ;//有无穷解
//求解唯一解(不能除,求逆元)
int b;
for(i=m-;i>=;i--)
{
for(j=i+;j<m;j++)
a[i][m]=((a[i][m]-a[j][m]*a[i][j])%mod+mod)%mod;
b=quickpow(a[i][i],mod-,mod);
a[i][m]=(a[i][m]*b)%mod;
if(a[i][m]<) a[i][m]+=mod;
}
return ;
} int main()
{
freopen("a.in","r",stdin);
while()
{
int x,n,m,num;
scanf("%d%d",&n,&m);
if(!n && !m) return ;
memset(a,,sizeof(a));
for(int i=;i<=m;i++)
{
scanf("%d%s%s",&num,s1,s2);
a[i][n+]=((idx(s2)-idx(s1)+)%mod+mod)%mod;
for(int j=;j<=num;j++)
{
scanf("%d",&x);
a[i][x]++;
a[i][x]%=mod;
}
}
// output(m,n+1);
int flag=gauss(m,n+);
if(flag==-) printf("Inconsistent data.\n");
if(flag==) printf("Multiple solutions.\n");
if(flag==)
{
for(int i=;i<n;i++) printf("%d ",a[i][n+]);
printf("%d\n",a[n][n+]);
}
}
return ;
}
【poj2947】高斯消元求解同模方程组【没有AC,存代码】的更多相关文章
- poj2947(高斯消元解同模方程组)
题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...
- 【zoj3645】高斯消元求解普通线性方程
题意: 给你一个方程组(含有12个方程),求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11) 方程组的形式是一个二次方程组 (ai1-x1)^2 + (ai2-x2)^2 +( ...
- 【poj1830-开关问题】高斯消元求解异或方程组
第一道高斯消元题目~ 题目:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关 ...
- POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题
http://poj.org/problem?id=1222 http://poj.org/problem?id=1830 http://poj.org/problem?id=1681 http:// ...
- POJ 1830 开关问题(高斯消元求解的情况)
开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8714 Accepted: 3424 Description ...
- POJ2947Widget Factory(高斯消元解同模方程)
http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...
- POJ 2065 高斯消元求解问题
题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...
- Poj 2947 widget factory (高斯消元解同模方程)
题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...
- poj2947 高斯消元
Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 5218 Accepted: 1802 De ...
随机推荐
- Java常用类之Math类
Java 的常用类Math类: java.lang.Math 提供了系列的静态方法用于科学计算,其方法的参数和返回值类型一般为 double 类型. 如: 1. public static final ...
- 《剑指offer》---丑数
本文算法使用python3实现 1. 问题1 1.1 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数. 时间限制:1s:空间限制:32768K ...
- 关于JS里面写JAVA代码的问题
最近做项目需要在JS脚本里面调用一个JAVA的函数得到数据,在网上查了很久,发现JS脚本里面不能写JAVA函数.只能把JS脚本里面的代码写进JSP文件里面的<script>标签内,然后写J ...
- 关于FEer发展方向的思考
今天学习了HTTP权威指南这本书,虽然标题是对FEer发展的思考,不过我打算稍后再说这个议题,先对今天学习的内容做个总结. 首先:原来访问服务器的方式有多重,核心是URI,也就是统一资源定位,按照访问 ...
- Flink的序列化与flink-hadoop-compatibility
最近 用户提交了一个问题 说他的jar包里明明包含相关的类型 但是在提交Flink作业的时候 却报出classnotfound的错误 查看之后发现 这里是flink的一个没有说的太明白的地方 用户的代 ...
- 深入理解java内置锁(synchronized)和显式锁(ReentrantLock)
多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两种同步方式.显式锁是JDK1.5引入的,这两种锁有什么异同呢? ...
- Luogu1041 NOIP2003传染病控制(搜索)
暴搜加个最优性剪枝即可.一直觉得正式比赛出这种不能一眼看出来暴搜就行了的搜索题的出题人都是毒瘤. #include<iostream> #include<cstdio> #in ...
- CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法
使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...
- Python替换字符串中的反斜杠\
s = 'cdp\nd' result = eval(repr(s).replace('\\', '@')) print(result) repr() 函数可以将字符串转换为python的原始字符串( ...
- 控制Docker Compose的启动顺序的一个思路
起源 守护进程daemon 从守护进程的角度看Docker Compose Docker的解决方案 思路 代码 结果 起源 Docker Compose提供了一个depends_on参数. https ...