寒假作业~就把文章和题解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. 吐血分享:QQ群霸屏技术教程2017(效益篇)

    懂得如何做群排名了,接下来就要实质性的考虑产出了. 可能,咱们经常发现,一些群里拉人的,进群看某片,5元钱终生,这类是灰色的.其实正规的付费空间也很大. 群利润空间 有工作,有产品,有项目,可以做群排 ...

  2. 【tp5.1】七牛云上传图片

    composer安装: composer require qiniu/php-sdk 配置使用: 在tp5.1的配置文件app.php中配置七牛云的参数 'qiniu' => [ 'access ...

  3. java服务端项目开发规范

    更新内容 2015-03-13 (请先更新svn的mybatis.xml.BaseMapper.java.Pager.java文件) 加入测试类规范 加入事物控制规范 加入mapper接口规则 ...

  4. 《python编程从入门到实践》第六章笔记

    1.字典 字典:一系列键-值对,每一个键都与每一个值相关联.与键相关联的值可以是数字.字符串.列表和字典. 最简单的字典只有一个键值对. eg: alien = {'color':'green','p ...

  5. 安装java 和 eclipse

    昨天安装eclipse出现个问题, 安装完了创建第一个项目目录的时候弹窗报错an ......什么什么, 百度一堆没有用,后来发现是jdk12不支持,换了jdk8就可以了, 然后eclipse安装py ...

  6. python中的字符串(str)操作

    字符串是python中数据类型.一般就单引号(‘’)或双引号(“”)引起来的内容就是字符串. 例如:下面两个都是定义字符串 str1 = "hello world" str2 = ...

  7. latex03-LaTeX中的中文处理办法

    编译含中文的tex文件的前提有三个: 默认编译器为XeLaTeX: 编辑器的默认字体编码格式为UTF-8: 引入ctex的宏包. 效果: 源码: %导言区 \documentclass{article ...

  8. Fabric go sdk初始化所需证书解析

    fabric sdk go 提供的官方文档少之又少,要想入门,主要就靠研究官方的e2e系列示例,这真的是一件挺无奈的事情.没法子,只能硬着头皮上了.研究发现,e2e这个例子是通过cryptogen生成 ...

  9. (数据科学学习手札01)Python与R基本数据结构之异同

    Python 1.列表(list) list1 = [i for i in range(10)] list1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 特点:可遍历,可索引,可切片 ...

  10. POJ1679(次小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36692   Accepted: 13368 ...