寒假作业~就把文章和题解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. vue组件中的样式属性--scoped

    Scoped CSS Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当 ...

  2. PHP如何实现99乘法表?

    看到这个问题,可能大家更多的是考虑到用for循环,个人觉得使用for循环太影响程序性能.推荐使用递归处理.  /** * Title : 递归实现99乘法表 * Author : Bruceqi * ...

  3. mongo数据库相关目录

    mongodb的docker化安装 mongodb的windows系统下安装 grafana使用Prometheus数据源监控mongo数据库 mongodb副本集的docker化安装 mongodb ...

  4. Python序列删除重复数据

    ## 对于列表来说,若不保持原有顺序,可以直接转换为set删除重复数据 nums = [1,2,32,2,2,4,3,2,3,42] nums = list(set(nums)) print(nums ...

  5. mac 安装requests

    首先mac上已经安装了python,我的是python2x,我自己安装了python3,python3安装requests,控制台,输入,pip3 install requests 下面就已经安装完成 ...

  6. C语言:类型、运算符、表达式

    看了一天书,有点累了.就写写随笔记录一下今天的复习成果吧. C语言的基本数据类型 数值型:整型数,浮点数,布尔数,复数和虚数. 非数值型:字符. 整数最基本的是int,由此引出许多变式诸如有符号整数s ...

  7. POJ3687 反向拓扑排序

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16032   Accepted: 4713 D ...

  8. ffmpeg安装配置以及库调用

    参考https://blog.csdn.net/jayson_jang/article/details/52329508 cd ffmpeg ./configure --enable-shared - ...

  9. 【Consul】多数据中心

    Consul的一个关键特性是支持多数据中心.consul架构中提到是构建低耦合的多个数据中心,一个数据中心的网络连接问题或故障不在其他数据中心的可用性.每个数据中心都是独立运行,并且拥有私有的LAN ...

  10. python脚本退出后 不应该为负值

    Python sys.exit的退出代码 sys.exit(n)介绍 功能:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它 ...