题意:

给出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. sosreport命令 然后diff 正常的操作系统例如centos

    nux学习笔记:有用的linux命令  发表于 2018-06-25 |  分类于 linux|  字数统计: 1,269 |  阅读时长 ≈ 6 写在前面 这着笔记,整理一些网上搜集到有用的linu ...

  2. 【山外笔记-工具框架】SVN版本控制系统

    [山外笔记-框架工具]SVN版本控制系统 学习资料: 1.本文打印版下载地址:[山外笔记-框架工具笔记]SVN版本控制工具-打印版.pdf 2.SVN和TortoiseSVN在线中文文档:http:/ ...

  3. Docker Swarm(五)Config 配置管理

    前言 在动态的.大规模的分布式集群上,管理和分发配置文件也是很重要的工作.传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性. Docker 1 ...

  4. 国产龙芯3A3000处理器评测:与英特尔差距明显

    国产龙芯3A3000处理器评测:与英特尔差距明显 国产龙芯3A3000处理器评测:与英特尔差距明显 新浪财经APP缩小字体放大字体收藏微博微信分享579 新酷产品第一时间免费试玩,还有众多优质达人分享 ...

  5. exit()和_exit()的区别

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/HAHAandHEHE/article/de ...

  6. 10.16-17 mailq&mail:显示邮件传输队列&发送邮件

    mailq命令 是mail queue(邮件队列)的缩写,它会显示待发送的邮件队列,显示的条目包括邮件队列ID.邮件大小.加入队列时间.邮件发送者和接受者.如果邮件进行最后一次尝试后还没有将邮件投递出 ...

  7. 达梦数据库产品支持技术学习分享_Week1

    本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考. 一.达梦数据库的体系架构 二.达梦数据库的安装 三.达梦数据库的数据类型 四.达梦数据库的DDL.DML. ...

  8. Go基础结构与类型04---基本数据类型

    package main import "fmt" func main() { //整型 var a byte = 123 var b rune = 123 var c int = ...

  9. maven项目多环境打包问题

    1.xxx-api是基于springboot的模块 2.配置文件 application.properties spring.profiles.active=@activeEnv@ applicati ...

  10. 鱼眼摄像头SLAM

    鱼眼摄像头SLAM 在机器人技术.摄影测量学和计算机视觉等领域,鲁棒相机位姿估计是许多视觉应用的核心.近年来,在复杂.大规模的室内外环境中,人们越来越关注相机位姿估计方法的实时性.通用性和可操作性.其 ...