POJ 1166 The Clocks 高斯消元 + exgcd(纯属瞎搞)
依据题意可构造出方程组。方程组的每一个方程格式均为:C1*x1 + C2*x2 + ...... + C9*x9 = sum + 4*ki;
高斯消元构造上三角矩阵,以最后一个一行为例:
C*x9 = sum + 4*k。exgcd求出符合范围的x9,其它方程在代入已知的变量后格式亦如此。
第一发Gauss。蛮激动的。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <ctime> #pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define INF 0x3f3f3f3f
#define Mod 6000007 using namespace std; const int MAXN = 20; int up[] = {0,4,3,4,3,5,3,4,3,4}; int site[10][5] = {
{0},
{1,2,4,5},
{1,2,3},
{2,3,5,6},
{1,4,7},
{2,4,5,6,8},
{3,6,9},
{4,5,7,8},
{7,8,9},
{5,6,8,9}
}; int Map[10]; LL coe[MAXN][MAXN];
LL sol[MAXN]; void Output()
{
int i,j;
for(i = 1;i <= 9; ++i)
{
for(j = 1;j <= 10; ++j)
{
printf("%lld ",coe[i][j]);
if(j == 9)
printf("= ");
}
printf("\n");
}
puts("");
} LL Abs(LL x)
{
if(x < 0)
return -x;
return x;
} LL gcd(LL x,LL y)
{
if(y == 0)
return x;
return gcd(y,x%y);
} void exgcd(LL a,LL b,LL &x,LL &y)
{
if(b == 0)
x = 1,y = 0;
else
{
LL x1,y1;
exgcd(b,a%b,x1,y1);
x = y1;
y = x1-a/b*y1;
}
} //n为行数,m为列数(包括最后一项)
//return -1无整数解 return 0存在整数解。
int Gauss(int n,int m)
{
int i,j,k; LL T,A,B; //Output(); for(i = 1;i < n; ++i)
{
for(j = i+1;j <= n; ++j)
{
if(coe[j][i] == 0)
continue; if(coe[i][i] == 0)
{
for(k = i;k <= m; ++k)
T = coe[i][k],coe[i][k] = coe[j][k],coe[j][k] = T;
continue;
} T = gcd(coe[i][i],coe[j][i]);
A = coe[j][i]/T,B = coe[i][i]/T; for(k = i;k <= m; ++k)
coe[j][k] = coe[i][k]*A - coe[j][k]*B;
}
//Output();
} LL sum = 0; for(i = n;i >= 1; --i)
{
sum = coe[i][m];
for(j = m-1;j > i; --j)
sum -= coe[i][j]*sol[j]; LL A = coe[i][i],B = 4,C = sum;
LL x,y; exgcd(A,B,x,y);
//cout<<"A = "<<A<<" B = "<<B<<" C = "<<C<<" x = "<<x<<" y = "<<y<<endl;
x *= C/gcd(A,B);
//cout<<"x = "<<x<<endl;
y = B/gcd(A,B);
x = (x-x/y*y + Abs(y))%Abs(y);
sol[i] = x; //cout<<"i = "<<i<<" x = "<<x<<endl; // if(sum%coe[i][i] != 0)
// return -1;//此时无整数解
// sol[i] = sum/coe[i][i];
} return 0;
} int main()
{
int i,j; for(i = 1;i <= 9; ++i)
scanf("%d",&Map[i]); memset(coe,0,sizeof(coe)); for(i = 1;i <= 9; ++i)
{
for(j = 0;j < up[i]; ++j)
{
coe[site[i][j]][i] = 1;
}
} for(i = 1;i <= 9; ++i)
coe[i][10] = (4-Map[i])%4; if(-1 == Gauss(9,10))
while(0)
; bool mark = true; for(i = 1;i <= 9;++i)
{
for(j = 0;j < sol[i]; ++j)
{
if(mark == false)
printf(" ");
else
mark = false;
printf("%d",i);
}
} return 0;
}
POJ 1166 The Clocks 高斯消元 + exgcd(纯属瞎搞)的更多相关文章
- POJ 1830 开关问题 高斯消元,自由变量个数
http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...
- A - The Water Bowls POJ - 3185 (bfs||高斯消元)
题目链接:https://vjudge.net/contest/276374#problem/A 题目大意:给你20个杯子,每一次操作,假设当前是对第i个位置进行操作,那么第i个位置,第i+1个位置, ...
- poj The Clocks 高斯消元
由于数据量不大,所以这题有很多解法. 我用的是高斯消元化为逆矩阵解决的…… 代码如下: #include<stdio.h> #include<iostream> using n ...
- POJ 2065 SETI(高斯消元)
题目链接:http://poj.org/problem?id=2065 题意:给出一个字符串S[1,n],字母a-z代表1到26,*代表0.我们用数组C[i]表示S[i]经过该变换得到的数字.给出一个 ...
- POJ 1830 开关问题 (高斯消元)
题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...
- Poj 2947 widget factory (高斯消元解同模方程)
题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...
- POJ 1753 Flip game ( 高斯消元枚举自由变量)
题目链接 题意:给定一个4*4的矩阵,有两种颜色,每次反转一个颜色会反转他自身以及上下左右的颜色,问把他们全变成一种颜色的最少步数. 题解:4*4的矩阵打表可知一共有四个自由变元,枚举变元求最小解即可 ...
- POJ 3532 Resistance(高斯消元+基尔霍夫定理)
[题目链接] http://poj.org/problem?id=3532 [题目大意] 给出n个点,一些点之间有电阻相连,求1~n的等效电阻 [题解] 有基尔霍夫定理:任何一个点(除起点和终点)发出 ...
- poj 1753 Flip Game 高斯消元
题目链接 4*4的格子, 初始为0或1, 每次翻转一个会使它四周的也翻转, 求翻转成全0或全1最少的步数. #include <iostream> #include <vector& ...
随机推荐
- jQuery中四种事件监听的区别
原文链接:点我 我们知道jquery提供了四种事件监听方式,分别是bind.live.delegate.on,下面就分别对这四种事件监听方式分析. 已知有4个列表元素: 列表元素1 列表元素2 列表元 ...
- iOS 的组件化开发
在一个APP开发过程中,如果项目较小且团队人数较少,使用最基本的MVC.MVVM开发就已经足够了,因为维护成本比较低. 但是当一个项目开发团队人数较多时,因为每个人都会负责相应组件的开发,常规开发模式 ...
- ReadyAPI/soapUI发送post请求json格式(带有中文字符),后台获取参数为空
解决:请求编码格式默认为空,在"TestCase"的指定Step的Request Properties中, 改Encoding编码格式为UTF-8. 原文:soapUI发送post ...
- 【Uva 1627】Team them up!
[Link]: [Description] 给你n个人; 有一些人之间有认识关系 a认识b,b不一定认识a 让你把这n个人分成两组 使得这两组中的每一组: 组内的人与人之间都相互认识. 并且,使得两组 ...
- js--09定时器
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 三个角度解构云计算,商业驱动or技术驱动?
从云计算的使用者到云服务的输出者,大多互联网公司在过去一年完成了角色的转换,也让云计算的未来更加扑朔迷离.不过,抛却进入时间这个评判因素,单从技术和商业化的角度来解构云计算的话,对于云计算的格局以及未 ...
- Java学习笔记十
网络编程: 一.osi和TCP协议对照: 二.通讯三要素: 三.InetAddress对象简述: import java.net.InetAddress; import java.net.Unknow ...
- dp之完全背包 hdu--2159一维数组做法
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int ma ...
- MDL--元数据锁的锁请求与锁等待+元数据锁类对象
1 元数据锁的锁请求与锁等待 元数据锁在MySQL Server层,依照锁的状态被细分为两种.一种是已经施加的锁.一种是等待施加的锁即锁请求,这样被区分的原因,如MySQL对"cla ...
- 类名引用static变量好处
不仅强调了变量static的结构,而且在有些情况下他还为编译器进行优化提供了更好的机会.