题意:

给出mod的大小,以及一个不大于70长度的字符串。每个字符代表一个数字,且为矩阵的增广列。系数矩阵如下

1^0 * a0 + 1^1 * a1 + ... + 1^(n-1) * an-1  =  f(1)

2^0 * a0 + 2^1 * a1 + ... + 2^(n-1) * an-1    =  f(2)

........

n^0 * a0 + n^1 * a1 + ... + n^(n-1) * an-1   =  f(n)

快速幂取模下系数矩阵

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = 100;
int a[MAXN][MAXN], x[MAXN];
int MOD; void debug(int n, int m)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
printf("%d ", a[i][j]);
printf(" %d\n", a[i][m]);
}
puts("**************************************************************");
} int powermod(int a,int b)
{
int ans=1;
a%=MOD;
while(b)
{
if(b&1) ans=ans*a%MOD;
a=a*a%MOD;
b=b>>1;
}
return ans;
} int gcd(int a,int b) //递归算法
{
return b ? gcd(b, a%b) : a;
} int lcm(int a, int b)
{
return a*b/gcd(a,b);
} int Guass(int equ,int var)
{
// debug(equ, var);
int row,col;
row=col=0;
while(row<equ && col<var)
{
//列非零主
int r=row;
for(int i=row; i<equ; i++)
if(a[i][col]!=0)
{
r=i;
break;
}
if(r!=row)
{
for(int j=col; j<var+1; j++)
swap(a[row][j],a[r][j]);
}
if(a[row][col]==0)//说明有自由变元
{
col++;
continue;
}
//消元
for(int i=row+1; i<equ; i++)
{
if(a[i][col]==0) continue;
int l = lcm(a[row][col],a[i][col]);
int ta = l/a[row][col];
int tb = l/a[i][col];
for(int j=col; j<var+1; j++)
a[i][j] = ((tb*a[i][j] - ta*a[row][j]) % MOD + MOD) %MOD;
}
// debug(equ, var);
row++;
col++;
}
// for(int i=row; i<equ; i++)
// if(a[i][var]!=0) return -1;
// if(row < var) return 1;
for(int i=row-1; i>=0; i--)
{
int tmp = a[i][var];
for(int j=i+1; j<var; j++)
tmp = ((tmp - x[j]*a[i][j])%MOD + MOD)%MOD;
while(tmp%a[i][i]) tmp += MOD;
x[i] = tmp/a[i][i]%MOD;
}
return 0;
} char s[100]; int main()
{
// freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d%s", &MOD, s);
int n = strlen(s);
memset(a, 0, sizeof(a));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
a[i][j] = powermod(i+1,j);
for(int i=0; i<n; i++)
a[i][n] = s[i]=='*'? 0:s[i]-'a'+1;
Guass(n, n);
for(int i=0; i<n; i++)
{
if(x[i]<0) x[i] += MOD;
printf("%d%c", x[i], i==n-1? '\n':' ');
}
}
return 0;
}

POJ 2065 SETI 高斯消元解线性同余方程的更多相关文章

  1. poj 2065 SETI 高斯消元

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

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

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

  3. 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 ...

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

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

  5. POJ 2947-Widget Factory(高斯消元解同余方程式)

    题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...

  6. BZOJ4269再见Xor——高斯消元解线性基

    题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...

  7. B - SETI POJ - 2065 (高斯消元)

    题目链接:https://vjudge.net/contest/276374#problem/B 题目大意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'* ...

  8. BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基

    BZOJ严重卡精,要加 $long$  $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...

  9. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

随机推荐

  1. Jira/Confluence配置Apache SSL 证书

    1. 申请证书 生成私钥 openssl genrsa -out server.key 2048 生成request文件 openssl req -new -key server.key -out s ...

  2. 013.Python的文件操作

    一 文件操作 fp = open("打开的文件",mode="模式选择",encoding="编码集") open 函数 返回一个文件io对 ...

  3. 克隆并编译otter

    源码编译: git clone 项目到本地,用IDEA打开,等待Maven下载完jar包,打开命令行,进入当前项目的lib目录 执行install.bat命令,该批处理文件会将缺失的jar包安装到你本 ...

  4. Mac 使用 Parallels Desktop 虚拟机安装 win10 教程

    Parallels Desktop 介绍 Parallels Desktop 是一款运行在 Mac 电脑上的极为优秀的虚拟机软件,用户可以在 Mac OS X下非常方便运行 Windows.Linux ...

  5. AD中如何解决 同一局域网下证书冲突问题

    AD中如何解决  同一局域网下证书冲突问题 https://wenku.baidu.com/view/c20e1720482fb4daa58d4b52.html

  6. 【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

    一.前言 事情是这个样子的,小农的公司,之前有个功能需要签署来进行一系列的操作,于是我们引入了一个三方平台的签署--上上签,但是有一个比较尴尬的点就是,它不支持合同在浏览器上和附件一起预览的,我们想要 ...

  7. 如何彻底禁止 macOS Big Sur 自动更新,去除更新标记和通知

    作者:gc(at)sysin.org,主页:www.sysin.org 请访问原文链接:https://sysin.org/article/Disable-macOS-Update/,查看最新版.原创 ...

  8. GO学习-(11) Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  9. Vue的常用特性

    Vue的常用特性 一.表单基本操作 都是通过v-model 单选框 1. 两个单选框需要同时通过v-model 双向绑定 一个值 2. 每一个单选框必须要有value属性 且value值不能一样 3. ...

  10. Python+Selenium学习笔记14 - python官网的tutorial - just() fill() format()

    repr(x).rjust(n)  左侧空格填充,右侧列对齐,str()和repr()是一种输出,也可不用,直接x.rjust() repr(x).ljust(n)  右侧空格填充,左侧列对齐 rep ...