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 ...
随机推荐
- QMessageBox消息框
QMessageBox提供两套接口来实现,一种是static functions(静态方法调用),另外一种 the property-base API(基于属性的API) #需要 from PyQt5 ...
- uboot 如何向内核传递参数
a.uboot 向内核传递的参数有两种类型 1.一个是bootargs 2.一个是环境参数, 而环境参数的设置靠的是 Y:\junda\JdLinuxApp\A1801_uboot\source\u- ...
- 2018-2019-2 网络对抗技术 20165320 Exp2 后门原理与实践
后门原理与实践 windows获取Linux操作Shell 获取本机的IP netcat介绍:一个进行基本的TCP.UDP数据收发的工具 相关的参数与具体用法 windows打开监听: ncat.ex ...
- WPF复制异常问题(OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)))
最近在维护WPF系统的时候发现的问题,刚刚开始自己的电脑都不能重现,后面写日志跟踪才发现问题的所在.问题主要是由于:1. 在程序访问剪切板的时候,有其他程序正在占用剪切板,导致自己的程序无法访问, ...
- 【漏洞分析】两个例子-数组溢出修改返回函数与strcpy覆盖周边内存地址
修改返回函数 return 0 下面的程序的运行流程为main()函数调用了Magic()函数,通常执行完Magic()函数后会调用return 0 的地址, 但是在执行Magic()函数中时,数组下 ...
- Python3学习笔记10-条件控制
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块 var1 = 100 if var1: print("1 - if 表达式条件为 true&q ...
- 如何解决OpenStack创建虚拟机或删除虚拟机时一直处于deleting或者creating状态的问题(转载)
原文地址:http://www.cnblogs.com/robertoji/p/4968280.html 在OpenStack使用时,有时候会遇到创建虚拟机或者删除虚拟机无法成功创建或者删除的时候,一 ...
- spring mvc 返回类型
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void 小结:1.使用 String 作为请求处理方 ...
- centos6.5环境利用scp实现自动化文件备份
centos6.5环境利用scp自动上传备份文件到指定服务器中 需要备份的主机 192.168.3.17 存放备份的主机 192.168.3.18 目的:将3.17主机上/data/storage的文 ...
- 在window是下安装hadoop过程
详细见http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html