POJ.2065.SETI(高斯消元 模线性方程组)
\(Description\)
求\(A_0,A_1,A_2,\cdots,A_{n-1}\),满足
\]
\]
\]
\]
其中\(B[i]\)为\(str[i-1]\)表示的数字。
\(Solution\)
模意义下的高斯消元,在初等行变换时把\(t=tar(A[i][j])/Anow(A[j][j])\)改为\(t=tag*inv(Anow)\)。(也可以在tar不整除Anow时把tar变为它们的lcm,即整行乘\(lcm(tar,Anow)/tar\))
最后求解回带时把除法用乘逆元替代即可。(也可用扩展欧几里得求出一个最小的ans[i])
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mod p
typedef long long LL;
const int N=100;
namespace Gauss
{
int p,n,A[N][N],ans[N];
char s[N];
int FP(LL x,int k)
{
LL t=1;
for(;k;k>>=1, x=x*x%p)
if(k&1) t=t*x%p;
return t;
}
inline int inv(int x) {return FP(x,p-2);}
void Init()
{
scanf("%d%s",&p,s);
n=strlen(s);
for(int i=0; i<n; ++i)
{
A[i][0]=1;
for(int j=1; j<n; ++j)
A[i][j]=(i+1)*A[i][j-1]%p;
A[i][n]= s[i]=='*'?0:s[i]-'a'+1;
}
}
void Solve()
{
Init();
for(int j=0; j<n; ++j)
{
int mxrow=j;
for(int i=j+1; i<n; ++i)
if(A[i][j]>A[mxrow][j]) mxrow=i;
if(mxrow!=j) std::swap(A[mxrow],A[j]);
for(int i=j+1; i<n; ++i)
if(A[i][j])
{
int t=A[i][j]*inv(A[j][j])%mod;
for(int k=j; k<=n; ++k)
A[i][k]=((A[i][k]-t*A[j][k]%mod)%mod+mod)%mod;
}
}
for(int i=n-1; ~i; --i)
{
for(int j=i+1; j<n; ++j)
A[i][n]=((A[i][n]-A[i][j]*ans[j]%mod)+mod)%mod;
ans[i]=A[i][n]*inv(A[i][i])%mod;
}
for(int i=0; i<n-1; ++i) printf("%d ",ans[i]);
printf("%d\n",ans[n-1]);
}
}
int main()
{
int t; scanf("%d",&t);
while(t--) Gauss::Solve();
return 0;
}/*
3
31 aaa
37 abc
29 hello*earth
*/
POJ.2065.SETI(高斯消元 模线性方程组)的更多相关文章
- POJ 2065 SETI [高斯消元同余]
题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...
- poj 2065 SETI 高斯消元
看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...
- POJ 2065 SETI 高斯消元解线性同余方程
题意: 给出mod的大小,以及一个不大于70长度的字符串.每个字符代表一个数字,且为矩阵的增广列.系数矩阵如下 1^0 * a0 + 1^1 * a1 + ... + 1^(n-1) * an-1 = ...
- POJ 2065 SETI (高斯消元 取模)
题目链接 题意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2.... 例如str[] = "abc&quo ...
- hdu 5755(高斯消元——模线性方程组模板)
PS. 看了大神的题解,发现确实可以用m个未知数的高斯消元做.因为确定了第一行的情况,之后所有行的情况都可以根据第一行推. 这样复杂度直接变成O(m*m*m) 知道了是高斯消元后,其实只要稍加处理,就 ...
- HDU.3571.N-dimensional Sphere(高斯消元 模线性方程组)
题目链接 高斯消元详解 /* $Description$ 在n维空间中给定n+1个点,求一个点使得这个点到所有点的距离都为R(R不给出).点的任一坐标|xi|<=1e17. $Solution$ ...
- B - SETI POJ - 2065 (高斯消元)
题目链接:https://vjudge.net/contest/276374#problem/B 题目大意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'* ...
- POJ SETI 高斯消元 + 费马小定理
http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...
- POJ 2947-Widget Factory(高斯消元解同余方程式)
题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...
随机推荐
- php 日期格式转换万能公式
思路用strtotime转换时间的字符串 $t='2017-03-09 02:30'; echo(date('Y-m-d H-i', strtotime($t)));
- Ex 6_19 至多用k枚硬币兑换价格_第七次作业
子问题定义: 定义一个二维数组b,其中b[i][j]表示用i个硬币是否能兑换价格j,表示第i个币种的面值, 递归关系: 初值设定: 求解顺序: 按下标从小到大依次求解数组b每一列的值,最后二维数组b的 ...
- 详解Android属性动画
前面我们讲到的属性动画都是使用代码的定义方式:Android属性动画之ValueAnimator和Android属性动画之ObjectAnimator和AnimatorSet,下面我们再来看看使用XM ...
- css之margin
参考地址:http://www.imooc.com/learn/680 标准盒模型 元素尺寸 可视尺寸-clientWidth(标准)——就是上图中的border box包含的尺寸. 占据尺寸-out ...
- python3中的编解码
#一个知识点是:python3中有两种字符串数据类型:str类型和 bytes类型:sty类型存储unicode数据,bytes类型存储bytes数据 #当我们在word上编辑文件的时候,数据保存之前 ...
- echarts饼图不显示数据为0的数据
首先阐述下为什么会有这个需求,这个和echarts自身的显示效果有关. 如果你选择的展示图形为饼图,然后你的数据里有一条数据为0,那么展示的数据就为一条直线,看上去效果并不好, 会很突兀. 当然如果你 ...
- Java 导入数据到Excel并提供文件下载接口
作者:Howie_Y链接:https://juejin.im/post/5ab4799451882521d6577fe4 最近的项目中遇到了一个将数据库的信息导入到一个 Excel 文件的需求,而且还 ...
- LeetCode(47):全排列 II
Medium! 题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路: 这道 ...
- SPLAY,LCT学习笔记(三)
前两篇讲述了SPLAY模板操作,这一篇稍微介绍一下SPLAY的实际应用 (其实只有一道题,因为本蒟蒻就写了这一个) 例:bzoj 1014火星人prefix 由于本蒟蒻不会后缀数组,所以题目中给的提示 ...
- 性能测试七:jmeter进阶之文件上传下载、定时器
一.上传下载 上传: 1,POST请求,勾选 use …for post 2,同请求一起发送文件里,填写文件名称,参数名称 3,MIME类型: application/octet-stream(非必须 ...