POJ2065 SETI 高斯消元
欢迎访问~原文出处——博客园-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 高斯消元的更多相关文章
- POJ2065 SETI(高斯消元 同模方程)
(a1 * 1^0 + a2 * 1^1 + ... an * 1^n - 1) % P = f1 .... (a1 * n^0 + a2 * n^1 + ... an - 1 * ...
- poj 2065 SETI 高斯消元
看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...
- POJ 2065 SETI [高斯消元同余]
题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...
- 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 ...
- POJ SETI 高斯消元 + 费马小定理
http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...
- UVA 1563 - SETI (高斯消元+逆元)
UVA 1563 - SETI option=com_onlinejudge&Itemid=8&page=show_problem&category=520&probl ...
- 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 ...
- 高斯消元几道入门题总结POJ1222&&POJ1681&&POJ1830&&POJ2065&&POJ3185
最近在搞高斯消元,反正这些题要么是我击败了它们,要么就是这些题把我给击败了.现在高斯消元专题部分还有很多题,先把几道很简单的入门题总结一下吧. 专题:http://acm.hust.edu.cn/vj ...
随机推荐
- 四、u-boot 链接脚本
4.1 C语言中的段 编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. 代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆 ...
- 使用PLC作为payload/shellcode分发系统
这个周末,我一直在鼓捣Modbus,并利用汇编语言开发了一个stager,它可以从PLC的保持寄存器中下载payload.由于有大量的PLC都暴露在互联网上,我情不自禁地想到,是否可以利用它们提供的处 ...
- POJ1258 Agri-Net【最小生成树】
题意: 有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离. 思路: 又是一个最小生成树,因为 ...
- c#中富文本编辑器Simditor带图片上传的全部过程(项目不是mvc架构)
描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目不是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显 ...
- 【通信】Jave代码中生成url http请求
/** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1& ...
- linux相关设置
mysql开机自启: [root@workstudio system]# systemctl enable mysqld
- Bootstrap模态框(一个页面显示多个)的使用
在一个页面显示多个模态框时要讲每个模态框用div包裹起来,否咋会产生格式错误. <html> <head> <meta charset="utf-8" ...
- SpringBoot定制错误页面
(1)有模板引擎的情况下,例如404错误,将会在thymeleaf的templates的error下寻找404.html,如果找不到再寻找4xx.html *所有4开头的错误状态码如果找不到特定的ht ...
- 分布式系列 - dubbo服务telnet命令【转】
dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的d ...
- openstack swift节点安装手册1-节点配置
本文参照官方教程:http://docs.openstack.org/project-install-guide/object-storage/draft/environment-networking ...