高斯消元解同余方程组
SETI
题意:输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2···
eg: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。
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
typedef long long ll;
const int maxn=400;
int a[maxn][maxn];//增广矩阵
int x[maxn];//解集
int equ,var,mod;//equ个方程var个未知数
int gcd(int a,int b)
{if(b==0)return a;return gcd(b,a%b);
}
int lcm(int a,int b)
{return a/gcd(a,b)*b;
}
int powmod(int a,int b,int c)
{a=a%c;int res=1;while(b){if(b&1)res=(res*a)%c;a=a*a%c;b>>=1;}return res;
}
/*int exgcd(int a,int b,int &x,int &y)//扩展欧几里得求逆元
{if(b==0){x=1;y=0;return a;}int ans=exgcd(b,a%b,x,y);int t=x;x=y;y=t-(a/b)*y;return ans;
}*/
int gauss()
{int max_r,col,k,i,j;for(k=0,col=0;k<equ&&col<var;k++,col++){max_r=k;for(i=k+1;i<equ;i++){if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;}if(a[max_r][col]==0){k--;continue;}if(max_r!=k){for(j=col;j<=var;j++)swap(a[k][j],a[max_r][j]);}for(i=k+1;i<equ;i++){if(a[i][col]!=0){int Lcm=lcm(abs(a[i][col]),abs(a[k][col]));int ta=Lcm/abs(a[i][col]);int tb=Lcm/abs(a[k][col]);if(a[i][col]*a[k][col]<0)tb=-tb;for(j=col;j<=var;j++){a[i][j]=((a[i][j]*ta-a[k][j]*tb)%mod+mod)%mod;}}}}for(i=k;i<equ;i++)if(a[i][col]!=0)return -1;//无解if(k<var)return var-k;//多解for(i=var-1;i>=0;i--){int temp=a[i][var];for(j=i+1;j<var;j++){if(a[i][j]){temp-=a[i][j]*x[j];temp=(temp%mod+mod)%mod;}}x[i]=temp*powmod(a[i][i],mod-2,mod)%mod;//逆元/*int xx,y;exgcd(a[i][i],mod,xx,y);x[i]=(temp*xx%mod+mod)%mod;*///扩展欧几里得求逆元}return 0;
}
int main()
{int t,i,j;char ch[maxn];scanf("%d",&t);while(t--){scanf("%d%s",&mod,ch);int len=strlen(ch);for(i=0;i<len;i++){if(ch[i]=='*')a[i][len]=0;elsea[i][len]=ch[i]-'a'+1;}equ=var=len;for(i=0;i<len;i++){for(j=0;j<len;j++){a[i][j]=powmod(i+1,j,mod);}}gauss();for(i=0;i<len-1;i++)printf("%d ",x[i]);printf("%d\n",x[i]);}
}
高斯消元解同余方程组相关推荐
- poj2947(高斯消元解同模方程组)
题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start end a1, a2......ap (1< ...
- jzoj3823 遇见 [高斯消元解异或方程组]
Description Zyh独自一人在街上漫步.Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵. 每个人都要在矩阵 ...
- 【BZOJ1923】外星千足虫,高斯消元解xor方程组
Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...
- 第三十四章 数论——高斯消元解线性方程组
第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...
- HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)
题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...
- [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题
[AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...
- 高斯消元 AcWing 883. 高斯消元解线性方程组
高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...
- POJ 2947 Widget Factory (高斯消元解同余方程组)
题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...
- AcWing 883. 高斯消元解线性方程组(高斯消元模板)
先出裸的模板: #include<bits/stdc++.h>using namespace std; const int N = 110; typedef double db; db a ...
最新文章
- iOS SwiftUI篇-1 项目结构
- 举个栗子看如何做MySQL 内核深度优化
- c 传入易语言字节,易语言字节集参数传递详解
- SQL datediff (时间差)
- python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
- KillTimer析构函数
- input限制输入小数点后两位(vue版本)
- STL源码剖析 set相关算法
- python自动备份数据库_Python Mysql自动备份脚本
- kafka消费者分区的分配的三种机制
- DEIGRP 的配置
- python导入类属性不存在_为什么我会得到一个错误:我的类中不存在该属性?
- Intel 加速分布式计算系统的三个神器
- 抽象类与接口的区别(
- MNIST数据集下载
- Latex tabular和tabular* 注意表格样式参数命令
- scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取
- fifo算法原理及fifo置换算法
- 1200000有多少个约数
- 谷歌Zxing Utils
热门文章
- python 删除set指定值_python中的变量和数据类型(三)
- 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
- python自学要多久-python从入门到精通需要多久?你需要先明白这两个点
- python有什么用-python都可以做什么用
- python工资一般多少p-Python是什么?简单了解pythonp-入门
- python代码翻译器-python写的翻译代码
- python读音播报-基于python GUI开发的点名小程序(语音播报)
- 51—Nod 1384 全排列
- V-最大公约数 递归
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)