题意:

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.”,如果
只有唯一解,则输出每种装饰物需要生产的天数。

题解:
设每种装饰物需要生产的天数为xi(1<=i<=n)。每一个条件就相当于
给定了一个方程式,假设生产1 类装饰物a1 件、2 类装饰物a2 件、i 类装饰物ai 件所花费
的天数为b,则可以列出下列方程:
a1*x1+a2*x2+...an*xn = b (mod 7)
这样一共可以列出m个方程式,然后使用高斯消元来解。
 
感觉高斯消元求解同模方程组跟线性方程组很像。
如果求出了一组解(x1,x2.....xn),则(x1+mod,x2+mod,.....,xn+mod)也是一组解。
必定有一组解是xi都<mod的。
所以就在加减的时候都要mod。然后还有不能直接除,要求逆元。
 
放个模版(n个方程,m-1个未知数),跟上题浮点数不一样,这题是整数,所以要求最小公倍数:
 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,存代码】的更多相关文章

  1. poj2947(高斯消元解同模方程组)

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

  2. 【zoj3645】高斯消元求解普通线性方程

    题意: 给你一个方程组(含有12个方程),求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11) 方程组的形式是一个二次方程组 (ai1-x1)^2 + (ai2-x2)^2 +( ...

  3. 【poj1830-开关问题】高斯消元求解异或方程组

    第一道高斯消元题目~ 题目:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关 ...

  4. 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:// ...

  5. POJ 1830 开关问题(高斯消元求解的情况)

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8714   Accepted: 3424 Description ...

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

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

  7. POJ 2065 高斯消元求解问题

    题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...

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

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

  9. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

随机推荐

  1. Daily Scrum 11

    今天我们小组开会内容分为以下部分: part 1: 针对学长的搜索算法进行优化,每人发表自己的看法; part 2:对积分系统.防滥用.搜索算法优化部分代码任务的讨论和分工: part 3:进行明日的 ...

  2. Spring学习(三)—— 自动装配案例分析

    Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,construct ...

  3. ServletContext域对象

    场景:假设某个web服务,有两个servlet分别是servlet1和servlet2,servlet1要传参数name=zhangsan传送给servlet2,传统方法如下: servlet1端:用 ...

  4. Window Classes in Win32

    探索Win32系统之窗口类(Window Classes in Win32) Kyle MarshMicrosoft Developer Network Technology GroupMSDN技术组 ...

  5. bwapp之xss(blog)

    存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行.这种XSS比较危险,容易造 ...

  6. 统一日志系统 Log4Net/ExceptionLess

    一.   写在前面 本文Log4Net介绍了基础的方式,大数据量生产环境不能使用,中等日志量请日志单库. 希望爱技术的你不要错过exceptionless和ELK 第四节开始简单配置大牛们推荐的了Ex ...

  7. [OS] 生产者-消费者问题(有限缓冲问题)

    ·最简单的情形--(一个生产者 + 一个消费者 + 一个大小为1的有限缓冲) 首先来分析其中的同步关系: ·必须在生产者放入一个产品之后,消费者才能够从缓冲中取出产品来消费.·只有在消费者从缓冲区中取 ...

  8. Keil MDK中Image~~RW_IRAM1~~ZI~~Limit(~表示$)

    ARM程序的组成 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.            一个ARM程序包含3部分:RO, ...

  9. bzoj4753[JSOI2016]最佳团体

    题意:01分数规划,但可选的数字之间存在森林形的依赖关系(可以认为0号点是个虚根,因为并不能选). 虽然有森林形的依赖关系,但还是可以套分数规划的思路,二分答案k,判断是否存在一个比值大于k的方案 即 ...

  10. 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组+离散化

    题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质量可以被赋予一 ...