POJ 2065 SETI (高斯消元 取模)
题意:
输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2....
例如str[] = "abc", 那么说明 n=3, 字符串所对应的数列为1, 2, 3。
题目中定义了一个函数:
a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1)(mod p), f(1) = str[0] = a = 1;
a0*2^0 + a1*2^1+a2*2^2+........+an-1*2^(n-1) = f(2) (mod p) , f(2) = str[1] = b = 2;
..........
a0*n^0 + a1*n^1+a2*n^2+........+an-1*n^(n-1) = f(n) (mod p) ,f(n) = str[n-1] = ````
求出 a0,a1,a2....an-1.
感谢大神翻译。
分析:
除了题意有点难懂以外,没有什么,就是给了一个一个含有n个方程n个未知数的线性方程组,让求解。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define LL __int64
const int maxn = +;
const int INF = <<;
using namespace std;
int equ, var, fn;
int a[maxn][maxn], x[maxn];
bool free_x[maxn]; int gcd(int a, int b)
{
return b==?a:gcd(b, a%b);
}
int lcm(int a, int b)
{
return a*b/gcd(a, b);
}
int Gauss(int x_mo)
{
//int x_mo;
//x_mo = 7;
int i, j, k, max_r, col;
int ta, tb, LCM, tmp, fx_num;
int free_index;
col = ; for(k = ; k<equ && col<var; k++, col++)
{
max_r = k;
for(i = k+; i < equ; i++)
if(abs(a[i][col])>abs(a[max_r][col]))
max_r = i; if(max_r != k)
for(j = k; j < var+; j++)
swap(a[k][j], a[max_r][j]); if(a[k][col]==)
{
k--;
continue;
}
for(i = k+; i < equ; i++)
{
if(a[i][col] != )
{
LCM = lcm(abs(a[i][col]), abs(a[k][col]));
ta = LCM/abs(a[i][col]);
tb= LCM/abs(a[k][col]);
if(a[i][col]*a[k][col] < ) tb = -tb; for(j = col; j < var+; j++)
a[i][j] = ((a[i][j]*ta - a[k][j]*tb)%x_mo+x_mo)%x_mo;
}
}
}
for(i = var-; i >= ; i--)
{
tmp = a[i][var];
for(j = i+; j < var; j++)
if(a[i][j] != )
tmp = ((tmp-a[i][j]*x[j])%x_mo+x_mo)%x_mo; if(a[i][i]==)
x[i] = ;
else
{
//if(tmp%a[i][i] != 0) return -2;
while(tmp%a[i][i]!=) tmp += x_mo;
x[i] = (tmp/a[i][i])%x_mo;
}
}
return ;
}
int check(char ch)
{
if(ch=='*') return ;
return ch-'a'+;
}
int Pow(int tmp, int j, int x_mo)
{
int sum = ;
tmp %= x_mo;
for(int i = ; i <= j; i++)
{
sum *= tmp;
sum %= x_mo;
}
return sum%x_mo;
}
int main()
{
int x_mo, i, j, t, len, n;
char s[maxn];
scanf("%d", &t);
while(t--)
{
scanf("%d %s", &x_mo, s);
len = strlen(s);
n = len;
equ = n; var = n;
memset(a, , sizeof(a));
memset(x, , sizeof(x));
for(i = ; i < n; i++)
a[i][n] = (check(s[i]))%x_mo; //按照题目要求
for(i = ; i < n; i++)
{
int tmp = check(s[i]);
for(j = ; j < n; j++)
{
a[i][j] = Pow(i+, j, x_mo); //按照题目要求,由于直接求(i+1)^j会超int所以在计算的时候一直取模
}
}
fn = Gauss(x_mo);
for(i = ; i < n; i++)
{
if(i == n-) printf("%d\n", x[i]);
else printf("%d ", x[i]);
}
}
return ;
}
POJ 2065 SETI (高斯消元 取模)的更多相关文章
- 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 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 = ...
- 2017湘潭赛 A题 Determinant (高斯消元取模)
链接 http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 今年湘潭的A题 题意不难 大意是把n*(n+1)矩阵去掉某一列 ...
- 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个数为物品的 ...
- POJ2065 SETI 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2065 题意概括 多组数据,首先输入一个T表示数据组数,然后,每次输入一个质数,表示模数,然后,给出一 ...
随机推荐
- 把NodeJS注册成Windows服务
为了让NodeJS开发的网站能在服务器端正常运行,最好把NodeJS需要运行的代码注册成Windows服务,服务器如果重启也不需要重新去启动NodeJS. 1.编写一个执行NodeJS脚本的bat文件 ...
- SQL SERVER 強制指定使用索引 -转载 只为学习
今天很高兴 ,有学会了一种数据库优化的方式,哈哈 今天遇到一個查詢逾時的問題:兩段SQL,只差在WHERE,一個是WHERE COLUMN1='AAA',一個是WHERE COLUMN1='BBB', ...
- Python环境搭建和开发工具的配置
本文转自http://237451446.blog.51cto.com/2307663/766781 因为要学习python了,第一步当然是环境搭建和开发工具的配置了,下边开始了. 我的开发环境是在w ...
- 推荐acm题目
杭电 http://acm.hdu.edu.cn/onlineuser.php. 浙大 http://acm.zju.edu.cn/onlinejudge/submit.do?problemId= ...
- WinForm中Component Class、User Control及Custom Control的区别和使用-转
转http://www.cnblogs.com/jhtchina/archive/2010/11/28/1028591.html NET Framework 为您提供了开发和实现新控件的能力.除了常见 ...
- cg 到hlsl的转换
http://msdn.microsoft.com/en-us/library/windows/desktop/ff471376(v=vs.85).aspx http://gamedev.stacke ...
- VS2010 创建WindowsService服务
1.新建一个Windows 服务 2.添加Installer 这一步很重要,在处理完你的业务逻辑后需要添加一个Installer才能是你的Windows服务被安装. 在VS中添加Installer 右 ...
- RAD项目结构
- soap消息机制 讲解
SOAP(Simple Object Access Protocol,简单对象访问协议)作为一种信息交互协议在分布式应用中非常广泛,如WebService.在使用.Net开发WebService时候, ...
- Chp11: Sorting and Searching
Common Sorting Algo: Bubble Sort: Runime: O(n2) average and worst case. Memory: O(1). void BubbleSor ...