POJ_2065 SETI 【同余高斯消元】
一、题目
二、分析
给定一个模数,一串字符串,字符串长度为N,相当于是N个方程的答案,而这N个方程中有N个未知数,要求的就是这N个未知数的值,很显然的高斯消元,遇到模数和除法,用逆元就好。
三、AC代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath> using namespace std;
#define ll long long
#define Min(a,b) ((a)>(b)?(b):(a))
#define Max(a,b) ((a)>(b)?(a):(b))
const int maxn = 1e2;
int p;
char s[maxn];
int a[maxn][maxn], x[maxn];
int n, equ, var; int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a%b);
} int lcm(int a, int b)
{
return a / gcd(a, b) * b;
} int inv(int a, int m)
{
if(a == 1)
return 1;
return inv(m%a, m) * (m - m/a)%m;
} int getInt(char c)
{
if(c == '*')
return 0;
else
return c - 'a' + 1;
} int Gauss()
{
int k, col, max_r;
for(k = 0, col = 0; k < equ && col < var; k++, col++)
{
max_r = k;
for(int i = k + 1; i < equ; i++)
{
if(fabs(a[i][col]) > fabs(a[max_r][col]))
max_r = i;
}
if(a[max_r][col] == 0)
{
k--;
continue;
}
if(max_r != k)
{
for(int i = col; i < (var + 1); i++)
{
swap(a[max_r][i], a[k][i]);
}
}
//消元
for(int i = k + 1; i < equ; i++)
{
if(a[i][col] != 0)
{
int LCM = lcm( fabs(a[i][col]), fabs(a[k][col]));
int ta = LCM / fabs(a[i][col]);
int tb = LCM / fabs(a[k][col]);
//异号
if(a[i][col]*a[k][col] < 0)
tb = -tb;
for(int j = col; j < (var + 1); j++)
{
a[i][j] = ((a[i][j] * ta - a[k][j] * tb) % p + p)%p;
a[i][col] = 0;
}
}
}
}
for(int i = k; i < equ; i++)
{
if(a[i][var+1] != 0)
return -1; //无解
}
//多解
if(k < var)
return var - k;
for(int i = var - 1; i >= 0; i--)
{
int tmp = a[i][var];
for(int j = i + 1; j < var ;j++)
{
if(a[i][j] != 0)
{
tmp -= a[i][j] * x[j];
}
tmp = (tmp % p + p) % p;
}
x[i] = (tmp * inv(a[i][i], p)) % p;
}
} void solve()
{
equ = n, var = n;
int res = Gauss();
for(int i = 0; i < n; i++)
{
if(i)
printf(" ");
printf("%d", x[i]);
}
printf("\n");
} int main()
{
int T;
// freopen("input.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
scanf("%d", &T);
while(T--)
{
scanf("%d %s", &p, s);
n = strlen(s);
memset(a, 0, sizeof(a));
for(int i = 0; i < n; i++)
{
int res = 1;
for(int j = 0; j < n; j++)
{
a[i][j] = res;
res = res * (i + 1) % p;
}
a[i][n] = getInt(s[i]);
}
solve();
}
return 0;
}
POJ_2065 SETI 【同余高斯消元】的更多相关文章
- HDU 3364 Lanterns (高斯消元)
题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...
- POJ 2065 SETI [高斯消元同余]
题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...
- HDU 3571 N-dimensional Sphere( 高斯消元+ 同余 )
N-dimensional Sphere Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- poj 2065 SETI 高斯消元
看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...
- POJ2065 SETI 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2065 题意概括 多组数据,首先输入一个T表示数据组数,然后,每次输入一个质数,表示模数,然后,给出一 ...
- 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 SETI 高斯消元 + 费马小定理
http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...
- 高斯消元 分析 && 模板 (转载)
转载自:http://hi.baidu.com/czyuan_acm/item/dce4e6f8a8c45f13d7ff8cda czyuan 先上模板: /* 用于求整数解得方程组. */ #inc ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
随机推荐
- 3.keepalived+脚本实现nginx高可用
标题 : 3.keepalived+脚本实现nginx高可用 目录 : Nginx 序号 : 3 else exit 0 fi else exit 0 fi - 需要保证脚本有执行权限,可以使用chm ...
- Dos简单命令及CMD打开方式
打开CMD方式 开始+系统+命令提示符 WIN健+R 输入cmd打开控制台(推荐使用) 在任意文件夹下面,按住shift+鼠标右击,进入powershell 资源管理器的地址栏路径最前面+cmd+空格 ...
- 从GitHub Jobs! 看技术发展趋势! 程序员进阶必备!
0. https://jobs.github.com/positions GitHub Jobs: 1. https://jobs.github.com/positions/38bb8dc8-b5b4 ...
- JWT All In One
JWT All In One OAuth 2.0 JWT JSON Web Tokens https://jwt.io refs https://www.cnblogs.com/xgqfrms/tag ...
- useful podcast
useful podcast front end podcast https://shoptalkshow.com https://stackoverflow.blog/podcast/ SoundC ...
- 我眼中的价值币——NGK(下)
跨链交互方案并不是区块链世界中的一个新课题.自比特币诞生揭开智能合约的序幕之后,跨链交互的需求便产生了.但是,经过十年的发展,市场中的跨链解决方案进展缓慢,究之原因有以下几个方面. 首先,区块链的去中 ...
- MySQL学习04(DQL查询)
DQL查询 DQL语言 DQL( Data Query Language 数据查询语言 ) 查询数据库数据 , 如SELECT语句 简单的单表查询或多表的复杂查询和嵌套查询 是数据库语言中最核心,最重 ...
- Eclipse和MyEclipse光标变成黑色块解决办法
今天偶然发现了一个小技巧,O(∩_∩)O~暂且可以这样说吧,我认为喽. 以前经常在编写程序是不知到碰到键盘上的那个键了,或是那几个组合键了,使得Eclipse里的代码光标变成一个黑色块:在这个状态下, ...
- 微信小程序(四)-样式 WXSS
样式 WXSS https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxss.html 1.尺寸单位 rpx(respons ...
- Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发
===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...