寒假作业~就把文章和题解3道题的代码扔在这里啦——链接: https://pan.baidu.com/s/1kWkGnxd 密码: bhh9

1.HNOI2013游走

#include <bits/stdc++.h>
using namespace std;
#define maxn 600
#define db double
int n, m, degree[maxn];
db f[maxn][maxn], ans[maxn], fans;
bool dis[maxn][maxn]; struct edge
{
int x, y;
db ans;
}R[maxn * maxn]; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} bool cmp(edge a, edge b)
{
return a.ans > b.ans;
} void Gauss()
{
for(int i = ; i <= n; i ++)
{
int now = i, j = i;
for(int j = i + ; j <= n; j ++)
if(fabs(f[j][i]) > fabs(f[now][i])) now = j;
if(i != now)
{
for(int k = ; k <= n + ; k ++)
swap(f[i][k], f[now][k]);
}
for(int j = i + ; j <= n + ; j ++)
f[i][j] /= f[i][i];
for(int j = ; j <= n; j ++)
{
if(j == i) continue;
for(int k = i + ; k <= n + ; k ++)
f[j][k] -= f[j][i] * f[i][k];
}
}
} int main()
{
n = read(), m = read();
for(int i = ; i <= m; i ++)
{
int x = read(), y = read();
R[i].x = x, R[i].y = y;
degree[x] ++, degree[y] ++, dis[x][y] = dis[y][x] = true;
}
n -= ;
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
if(dis[i][j]) f[i][j] = - ( / (db) degree[j]);
else if(i == j) f[i][j] = ;
f[][n + ] = ;
Gauss();
for(int i = ; i <= n; i ++) ans[i] = f[i][n + ];
for(int i = ; i <= m; i ++)
R[i].ans = ((db) ans[R[i].x] / (db) degree[R[i].x]) + ((db) ans[R[i].y] / (db) degree[R[i].y]);
sort(R + , R + + m, cmp);
for(int i = ; i <= m; i ++)
fans += (db) i * R[i].ans;
printf("%.3lf\n", fans);
return ;
}

2.USACO灯

#include <bits/stdc++.h>
using namespace std;
#define maxn 60
int n, m, a[maxn][maxn], ans[maxn], fans = , tot; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void Gauss()
{
for(int i = ; i <= n; i ++)
{
int now = i, j = i;
while(j <= m && !a[j][i]) j ++;
if(j > m) continue;
if(now != j)
{
for(int k = ; k <= n + ; k ++)
swap(a[now][k], a[j][k]);
}
for(int j = ; j <= n; j ++)
if(j != i && a[j][i])
{
for(int k = ; k <= n + ; k ++)
a[j][k] ^= a[i][k];
}
}
} void dfs(int now)
{
if(tot >= fans) return;
if(!now)
{
fans = min(fans, tot);
return;
}
if(a[now][now]) //不是自由元
{
int tem = a[now][n + ];
for(int i = now + ; i <= n; i ++)
if(a[now][i]) tem ^= ans[i];
ans[now] = tem;
if(tem) tot ++;
dfs(now - );
if(tem) tot --;
}
else
{
ans[now] = ;
dfs(now - );
tot ++;
ans[now] = ;
dfs(now - );
tot --;
}
} int main()
{
n = read(), m = read();
for(int i = ; i <= n; i ++)
a[i][i] = , a[i][n + ] = ;
for(int i = ; i <= m; i ++)
{
int x = read(), y = read();
a[x][y] = , a[y][x] = ;
}
Gauss();
dfs(n);
printf("%d", fans);
}

3.NOIP2004虫食算

#include <bits/stdc++.h>
using namespace std;
#define maxn 40
int n, f[maxn][maxn], g[maxn][maxn], d[maxn], x[maxn];
char s[][maxn];
bool vis[maxn], flag; int GCD(int x, int y)
{
int z;
while(y)
{
z = x % y;
x = y, y = z;
}
return x;
} int LCM(int x, int y)
{
return (x * y / GCD(x, y));
} void check()
{
memset(vis, , sizeof(vis));
for(int i = ; i <= n; i ++)
{
int sum = ;
for(int j = ; j <= n; j ++)
sum += d[j] * g[i][j];
if(sum % f[i][i]) return;
sum /= f[i][i];
if(sum < || sum >= n || vis[sum]) return;
vis[x[i] = sum] = true;
}
flag = true;
} void solve()
{
for(int p = ; p <= n; p ++)
{
int now = p;
for(int i = p + ; i <= n; i ++)
if(abs(f[i][p]) > abs(f[now][p])) now = i;
if(now != p)
{
for(int i = ; i <= n; i ++)
swap(f[now][i], f[p][i]), swap(g[now][i], g[p][i]);
}
for(int i = ; i <= n; i ++)
if(i != p && f[i][p])
{
int lcm = LCM(f[i][p], f[p][p]);
int d1 = lcm / f[i][p], d2 = lcm / f[p][p];
for(int j = ; j <= n; j ++)
{
f[i][j] = f[i][j] * d1 - f[p][j] * d2;
g[i][j] = g[i][j] * d1 - g[p][j] * d2;
}
}
}
} void dfs(int u)
{
if(u == )
{
check();
if(flag)
{
for(int i = ; i < n; i ++)
printf("%d ", x[i]);
printf("%d\n", x[n]);
exit();
}
return;
}
d[u] = , dfs(u - );
d[u] = , dfs(u - );
} int main()
{
scanf("%d", &n);
scanf("%s%s%s", s[] + , s[] + , s[] + );
for(int i = ; i <= n; i ++)
for(int j = ; j <= ; j ++)
if(j < ) f[i][s[j][i] - 'A' + ] += ;
else f[i][s[j][i] - 'A' + ] -= ;
for(int i = ; i <= n; i ++)
g[i][i] = n, g[i][i + ] = -;
solve();
dfs(n);
return ;
}

【算法】高斯消元&线性代数的更多相关文章

  1. AcWing 207. 球形空间产生器 (高斯消元)打卡

    有一个球形空间产生器能够在n维空间中产生一个坚硬的球体. 现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. ...

  2. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  3. 高斯消元初步(Gauss算法)

    Gauss算法,称为高斯消元算法,用来解决n元一次方程,在解决线性方程问题起着重要作用. 简述 运用高斯消元的方法,我们可以在O(n3)的时间求出n元线性方程,但是由于时间复杂度的原因,请注意题目数据 ...

  4. P3265 [JLOI2015]装备购买(高斯消元+贪心,线性代数)

    题意; 有n个装备,每个装备有m个属性,每件装备的价值为cost. 小哥,为了省钱,如果第j个装备的属性可以由其他准备组合而来.比如 每个装备属性表示为, b1, b2.......bm . 它可以由 ...

  5. 【CF736D】Permutations 线性代数+高斯消元

    [CF736D]Permutations 题意:有一个未知长度为n的排列和m个条件,第i个条件$(a_i,b_i)$表示第$a_i$个位置上的数可以为$b_i$.保证最终合法的排列的个数是奇数.现在有 ...

  6. 【高斯消元】CDOJ1785 曜酱的线性代数课堂(三)

    高斯消元求行列式板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  7. 【高斯消元】CDOJ1784 曜酱的线性代数课堂(二)

    高斯消元求矩阵秩板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  8. 【高斯消元】CDOJ1783 曜酱的线性代数课堂(一)

    高斯消元求逆矩阵板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  9. 算法复习——高斯消元(ssoi)

    题目: 题目描述 Tom 是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于下面这样的方程组就束手无策了.x+y=3x- ...

随机推荐

  1. JSP/Servlet开发——第二章 JSP数据交互(二)

    1. JSP 内置对象 application: ●application 对象类似于系统的 "全局变量", 用于同一个应用内的所有用户之问的数据共享: ●application对 ...

  2. 【mvrp多协议vlan注册协议给予三种注册方式的验证】

    MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...

  3. stm32+lwip(四):网页服务器测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  4. 当安装mongodb客户端出现了Failed to load list of databases

    在装mongodb最新版(4.1.5开发版)服务后,我用robo3t打开它的时候遇到了这个问题. 最直接的解决办法就是换一个mongodb版本,https://github.com/Studio3T/ ...

  5. (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)

    (原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...

  6. (原创)用Verilog实现一个参数化的呼吸灯(Verilog,CPLD/FPGA)

    1.Abstract     观察到一个有趣的现象,每当把Apple笔记本合上的时候,那个白色的呼吸灯就会反复地由暗渐明,然后又由明渐暗,乍一看就像Apple笔记本在打盹休息一样,十分可爱!于是突发奇 ...

  7. Java——英文字母---18.10.11

    package lianxi;import java.io.*;import java.util.Scanner;public class file{  public static void main ...

  8. wamp调用ICE中间件

    wamp调用ICE中间件 wamp 是集成开发包,我的wamp中的php 为5.3.10 ,经过3天艰苦奋战,终于在phpinfo()中看到了 ICE 出现了.. OK,最新的ice  为 3.5.1 ...

  9. js字符串操作函数

    js字符串函数 JS自带函数 concat 将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world&quo ...

  10. linux shell中读写操作mysql数据库

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...