欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - POJ2065


题意概括

  多组数据,首先输入一个T表示数据组数,然后,每次输入一个质数,表示模数,然后,给出一个长度为n的字符串,第i个位置的字符ch表示f(i)= ch == '*' ? 0 : ch-'a'+1

  求解同余方程:(模数为p)

  f(1)=10a0+11a1+...+1n-1an-1

  f(2)=20a0+21a1+...+2n-1an-1

  f(3)=30a0+31a1+...+3n-1an-1

  ......

  f(n)=n0a0+n1a1+...+nn-1an-1

  即

  f(k)=∑0<=i<=n-1aiki


题解

  根据题目的输入构建方程,然后就是高斯消元的裸题了。


代码

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=75;
int T,n,mod,a[N][N],x[N];
char ch[N];
int Pow(int x,int y){
if (!y)
return 1;
int xx=Pow(x,y/2);
xx=xx*xx%mod;
if (y&1)
xx=xx*x%mod;
return xx;
}
int Inv(int x){
return Pow(x,mod-2);
}
void Gauss(){
int k,c;
for (k=c=0;k<n&&c<n;k++,c++){
int Mk=-1;
for (int i=k;i<n;i++)
if (a[i][c]){
Mk=i;
break;
}
if (Mk==-1){
k--;
continue;
}
if (Mk!=k)
for (int i=c;i<=n;i++)
swap(a[Mk][i],a[k][i]);
for (int i=k+1;i<n;i++)
for (int j=n;j>=c;j--)
a[i][j]=(a[i][j]*a[k][c]-a[k][j]*a[i][c])%mod;
}
memset(x,0,sizeof x);
for (int i=n-1;i>=0;i--){
int tmp=a[i][n];
for (int j=i+1;j<n;j++)
tmp=(tmp-a[i][j]*x[j])%mod;
tmp=tmp*Inv(a[i][i])%mod;
x[i]=(tmp+mod)%mod;
}
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%d%s",&mod,ch);
n=strlen(ch);
for (int i=0;i<n;i++)
a[i][n]=ch[i]=='*'?0:((ch[i]-'a'+1)%mod);
for (int i=0;i<n;i++){
a[i][0]=1;
for (int j=1;j<n;j++)
a[i][j]=a[i][j-1]*(i+1)%mod;
}
Gauss();
for (int i=0;i<n;i++)
printf("%d ",x[i]);
puts("");
}
return 0;
}

  

POJ2065 SETI 高斯消元的更多相关文章

  1. POJ2065 SETI(高斯消元 同模方程)

    (a1 * 1^0  +   a2 * 1^1  + ...  an * 1^n - 1) % P = f1 .... (a1 * n^0  +   a2 * n^1  + ...  an - 1 * ...

  2. poj 2065 SETI 高斯消元

    看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...

  3. POJ 2065 SETI [高斯消元同余]

    题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...

  4. POJ.2065.SETI(高斯消元 模线性方程组)

    题目链接 \(Description\) 求\(A_0,A_1,A_2,\cdots,A_{n-1}\),满足 \[A_0*1^0+A_1*1^1+\ldots+A_{n-1}*1^{n-1}\equ ...

  5. POJ SETI 高斯消元 + 费马小定理

    http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...

  6. UVA 1563 - SETI (高斯消元+逆元)

    UVA 1563 - SETI option=com_onlinejudge&Itemid=8&page=show_problem&category=520&probl ...

  7. POJ 2065 SETI 高斯消元解线性同余方程

    题意: 给出mod的大小,以及一个不大于70长度的字符串.每个字符代表一个数字,且为矩阵的增广列.系数矩阵如下 1^0 * a0 + 1^1 * a1 + ... + 1^(n-1) * an-1 = ...

  8. POJ 2065 SETI (高斯消元 取模)

    题目链接 题意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2.... 例如str[] = "abc&quo ...

  9. 高斯消元几道入门题总结POJ1222&&POJ1681&&POJ1830&&POJ2065&&POJ3185

    最近在搞高斯消元,反正这些题要么是我击败了它们,要么就是这些题把我给击败了.现在高斯消元专题部分还有很多题,先把几道很简单的入门题总结一下吧. 专题:http://acm.hust.edu.cn/vj ...

随机推荐

  1. ELF格式探析之三:sections

    前文链接: ELF格式探析之一:Segment和Section ELF格式探析之二:文件头ELF Header详解 今天我们讲对目标文件(可重定位文件)和可执行文件都很重要的section. 我们在讲 ...

  2. 树的dfs序.欧拉序

    dfs序 ==先序,连续一段区间就是子树

  3. 虚拟机centos7系统下安装hadoop ha和yarn ha(详细)

    一:基础环境准备 (一):虚拟机新建五个centos7系统(复制文件夹的方式) (二):角色分配 (三)按照角色分配表配置 (1)更改主机ip(自行查找),如果只是个人搭建玩一玩,可选择安装cento ...

  4. requsets模块和beautifulsoup模块

    2.requests模块方法 requests是基于Python开发的HTTP库,使用Requests可以轻而易举的完成浏览器可有的任何操作. request.get() request.post() ...

  5. Linux之Ubuntu与Windows更改默认启动顺序[转载]

    装双系统后,经常会遇到与Windows更改默认启动顺序的需要,这样有助于开机时可以避免手动选择经常使用的系统了. 当然这解决办法不是博主的主意,本文纯属抄録者,故文章题目也声明了是转载,解决方案如下叙 ...

  6. Jetson tx2的tensorflow keras环境搭建

    其实我一直都在想,搞算法的不仅仅是服务,我们更是要在一个平台上去实现服务,因此,在工业领域,板子是很重要的,它承载着无限的机遇和挑战,当然,我并不是特别懂一些底层的东西,但是这篇博客希望可以帮助有需要 ...

  7. Freemarker导出word的简单使用

    1.模板 username:${username} password:${password} <#list mylist as item> ${item.name!} ${item.pas ...

  8. ubuntu14.04下 Kinect V2+Ros接口安装

    1. 首先git下载代码,放到主文件夹下面 git clone https://github.com/OpenKinect/libfreenect2.git 2. 然后安装依赖项如下,最好事先编译安装 ...

  9. python3字符串与文本处理

    每个程序都回涉及到文本处理,如拆分字符串.搜索.替换.词法分析等.许多任务都可以通过内建的字符串方法来轻松解决,但更复杂的操作就需要正则表达式来解决. 1.针对任意多的分隔符拆分字符串 In [1]: ...

  10. EMCA和EMCTL的简单用法

    背景 其实这两个完全是两回事,不过倒是有关系,emca就是建立的资料库,建立后就用emctl来管理服务了.oem有问题基本都是重建emca,然后用emctl来操作. 当时用emca感觉真是一阵空白,太 ...