UVA 1563 - SETI (高斯消元+逆元)
UVA 1563 - SETI
题意:依据题目那个式子。构造一个序列,能生成对应字符串
思路:依据式子能构造出n个方程。一共解n个未知量,利用高斯消元去解,中间过程有取摸过程。所以遇到除法的时候要使用逆元去搞
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 105; int pow_mod(int x, int k, int mod) {
int ans = 1;
while (k) {
if (k&1) ans = ans * x % mod;
x = x * x % mod;
k >>= 1;
}
return ans;
} int inv(int a, int n) {
return pow_mod(a, n - 2, n);
} int t, p, n, A[N][N];
char str[N]; int hash(int c) {
if (c == '*') return 0;
return c - 'a' + 1;
} void build() {
for (int i = 0; i < n; i++) {
A[i][n] = hash(str[i]);
int tmp = 1;
for (int j = 0; j < n; j++) {
A[i][j] = tmp;
tmp = tmp * (i + 1) % p;
}
}
} void gauss() {
for (int i = 0; i < n; i++) {
int r;
for (r = i; r < n; i++)
if (A[r][i]) break;
if (r == n) continue;
for (int j = i; j <= n; j++) swap(A[r][j], A[i][j]);
for (int j = 0; j < n; j++) {
if (i == j) continue;
if (A[j][i]) {
int tmp = A[j][i] * inv(A[i][i], p) % p;
for (int k = i; k <= n; k++) {
A[j][k] = (((A[j][k] - tmp * A[i][k]) % p) + p) % p;
}
}
}
}
for (int i = 0; i < n; i++)
printf("%d%c", A[i][n] * inv(A[i][i], p) % p, i == n - 1 ? '\n' : ' ');
} int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%s", &p, str);
n = strlen(str);
build();
gauss();
}
return 0;
}
UVA 1563 - 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 ...
- UVA 11542 - Square(高斯消元)
UVA 11542 - Square 题目链接 题意:给定一些数字.保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法 思路:对每一个数字分解成质因子后.发现假设要 ...
- poj 2065 SETI 高斯消元
看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...
- POJ 2065 SETI [高斯消元同余]
题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...
- POJ2065 SETI 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2065 题意概括 多组数据,首先输入一个T表示数据组数,然后,每次输入一个质数,表示模数,然后,给出一 ...
- UVa 11542 Square (高斯消元)
题意:给定 n 个数,从中选出一个,或者是多个,使得选出的整数的乘积是完全平方数,求一共有多少种选法,整数的素因子不大于 500. 析:从题目素因子不超过 500,就知道要把每个数进行分解.因为结果要 ...
- POJ SETI 高斯消元 + 费马小定理
http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...
- POJ2065 SETI(高斯消元 同模方程)
(a1 * 1^0 + a2 * 1^1 + ... an * 1^n - 1) % P = f1 .... (a1 * n^0 + a2 * n^1 + ... an - 1 * ...
- POJ 2065 SETI 高斯消元解线性同余方程
题意: 给出mod的大小,以及一个不大于70长度的字符串.每个字符代表一个数字,且为矩阵的增广列.系数矩阵如下 1^0 * a0 + 1^1 * a1 + ... + 1^(n-1) * an-1 = ...
随机推荐
- 利用expect验证主机口令
##########mianmi.sh############ #!/usr/bin/expect set ip [lindex $argv ] set password [lindex $argv ...
- PCB MongoDB 数据库 Collection集合导出与导入
由于一直以来用微软可视化图形界面习惯了,而MongoDB是命令式操作,而用系统自带CMD操作不方便, 这里介绍一款CMD的替代品,大小100多M. Cmder工具下载 https://github. ...
- ROS-URDF-Gazebo
前言:在gazebo里运行urdf文件 一.安装教程包 cd ~/catkin_test/srcgit clone https://github.com/ros/urdf_sim_tutorial.g ...
- radis多个盘并发IO
IO就是对磁盘的读/写. 一次IO,就是发出指令+执行命令. 磁盘IO的时间=寻道时间+数据传输时间 单盘不能并发IO. radis多个盘并发IO. 影响IO的最大因素是寻道时间. 影响电脑速度:cp ...
- css中background-origin属性的使用
background-origin用来规定元素背景图像的相对定位位置,它有三个属性值: 1.border-box border-box表示元素背景图像相对于border区域开始定位. 代码如下: &l ...
- Android开放百度地图集成
1.创建应用 获取AK (我理解为Application key) 通过百度账号登录百度地图开放平台,进入API控制台 http://lbsyun.baidu.com/apiconsole/key ...
- ArcGIS API For Android Errors汇总
API客户端异常错误的发生通常是由于不正确的方法参数,对象状态依赖,或网络条件. //*******推荐使用方法,按下Ctrl+F搜索错误代码,再查看与代码对应的解释.********// ArcGI ...
- SQL Server存储过程作业(三)
阶段4:练习——插入入住客人记录 需求说明 使用存储过程将入住客人信息插入客人信息表中,要求: 检查身份证号必须是18个字符组成 押金的默认值为1000元 如果客人记录插入成功,输出客人流水号:否则输 ...
- WebGL绘制三角形
本文程序实现绘制一个三角形的任务,如下图. 整个程序包含两个文件,分别是: 1. HelloTriangle.html <!DOCTYPE HTML PUBLIC "-//W3C//D ...
- Arduino DS18B20温度检测
一.实物图 注:电阻选取4.7k欧 二.事例代码 注:先下载Onewire库到arduino libraries目录下,然后就有例子 #include <OneWire.h> // One ...