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& ...
随机推荐
- Facebook下载总结
Facebook是美国的一个社交网络服务网站,至今注册用户已超越20亿,月活用户更是惊人的突破3亿. 这样庞大的一个社交类网站,每日产生的社交数据当然也是非常可观,而这些社交数据,更接近口语,所以是比 ...
- 学习《R数据科学》高清中文PDF+高清英文PDF+源代码
学习R有不会的就查工具书<R数据科学>, 工具不是重点,创造价值才是目的.具体到数据科学,表现形式往往是提供解决方案或者做出某种决策.至于使用什么语言,采用什么工具,不本质.用 R 还是 ...
- android对话框显示异常报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.
今天写android实验碰到到一个问题,在用AlertDialog.Builder类构建一个对话框之后,调用Builder.show()方法时抛出异常如下: - ::-/xyz.qlrr.sqlite ...
- RocketMQ 就是耗内存
http://blog.csdn.net/loongshawn/article/details/51086876 https://rocketmq.incubator.apache.org/docs/ ...
- IOS基础学习日志(七)利用dispatch_once创建单例及使用
自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行. ...
- 关于getinstalledpackages參数的分析。
此blog不写API的使用方法仅仅分析此參数的知识点. 今天学习安卓突然学习到了getinstalledpackages()的方法获取到安装应用信息 ,他接收一个int flags的值.然后在网上查询 ...
- js---11闭包
//匿名立即调用函数 (function(){//把a,b,f全部隐藏在函数中,外部访问不到, var a = 5; var b = 6; function f(){ alert(a); } wind ...
- H.264视频编解码SoC满足高清DVR设计需求
硬盘录像机(DVR)作为监控系统的核心部件之一,在10年里高速发展,从模拟磁带机的替代品演变成具有自己独特价值的专业监控数字平台,并被市场广泛接受.监控系统伴随DVR这些年的发展向着IP化.智能化发展 ...
- Impala性能优化
不多说,直接上干货! • 执行计划 – 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案 – 命令:explain sql.profile 要点: • 1.SQL优化,使用 ...
- CodeForces 159c String Manipulation 1.0
String Manipulation 1.0 Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on Cod ...