欢迎访问~原文出处——博客园-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. 无线路由器的web漏洞

    1.XSS漏洞 2.CSRF漏洞 这样的攻击方式具体可以由多种形式实现,除了建立欺诈服务器外,还可以使用超链接陷阱.所谓的超链接陷阱,就是指伪造一个可信的链接或者地址,但其实际地址中包含了修改无线路由 ...

  2. android AsyncHttpClient使用

    1.www.github.com下载jar包 loopj/android-async-http 将下载好的文件导入项目中 2.main.xml <?xml version="1.0&q ...

  3. 攻打医院服务器的SamSam勒索木马分析

    攻打医院服务器的SamSam勒索木马分析 近日一款名为SamSam的勒索木马在国外爆发.该木马利用医院系统的服务器漏洞实施入侵,再进行加密勒索钱财.由于医院网络信息安全水平普遍薄弱,SamSam成功感 ...

  4. ubuntu14.04 boost 1.58.0 安裝

    1.首先下载安装包,然后解压, 切换目录 wget -o boost_1_58_0.gar.gz http://sourceforge.net/projects/boost/files/boost/1 ...

  5. SpringBoot集成Spring Security(授权与认证)

    ⒈添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  6. 跟踪OceanLotus的新下载程序KerrDown

    攻击的方法 两种方法将KerrDown下载器传递给目标.一个是使用带有恶意宏的Microsoft Office文档,另一个是包含带有DLL side-loading合法程序的RAR存档 .对于RAR存 ...

  7. 【逆向工具】IDA使用2-VS2015版本release查找main函数入口,局部变量

    VS2015版本release查找main函数入口 vc++开发的程序main或WinMain函数是语法规定的用户入口,而不是应用程序入口.入口代码是mainCRTstartup.wmainCRTSt ...

  8. oracle查看表名称和表字段注释

    --查询该表字段的注释select * from user_col_comments where Table_Name like '%SMS%' --查询类似表select * from user_t ...

  9. java中集合的组成及特点

    1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程 ...

  10. python中对列表和循环使用的小练习

    #author devilf product_list = [ (), (), (), (), () ] shop_list = [] salary = input('pls enter your s ...