Problem A: Apple(高斯消元)
- 可以发现具有非常多的方程, 然后高斯消元就能85分
- 然而我们发现这些方程组成了一些环, 我们仅仅设出一部分变量即可获得N个方程, 就可以A了
- trick 合并方程
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <iostream>
#include <cmath>
#define ldb long double
#define ll long long
#define mmp make_pair
#define M 222
using namespace std;
int read() {
int nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
int n, m, x, y;
int id[M][M], cnt;
double d[M][M];
double f[M][M][M];
void gauss() {
for(int i = 0; i <= cnt; i++) {
int k = i;
for(int j = i + 1; j <= cnt; j++) if(fabs(d[j][i]) > fabs(d[k][i])) k = j;
if(k != i) for(int j = 0; j <= cnt + 1; j++) swap(d[i][j], d[k][j]);
for(int j = 0; j <= cnt; j++) {
if(i == j) continue;
double t = d[j][i] / d[i][i];
for(int k = 0; k <= cnt + 1; k++) d[j][k] -= d[i][k] * t;
}
}
}
int main() {
n = read(), m = read(), x = read(), y = read();
for(int i = 0; i < m; i++) f[n][i][i] = 1;
for(int i = n - 1; i > x; i--) {
double d = 0.5;
for(int j = 0; j < m; j++,d *= 0.5)
for(int k = 0; k <= m; k++)
f[i][0][k] += d * f[i + 1][j][k];
d *= 2;
f[i][0][m] += 2.0 - d * 2.0;
for(int k = 0; k <= m; k++)
f[i][m][k] = (f[i][0][k] *= 1.0 / (1.0 - d));
for(int j = m - 1; j > 0; j-- ) {
for(int k = 0; k <= m; k++)
f[i][j][k] += 0.5 * (f[i][j + 1][k] + f[i + 1][j][k]);
f[i][j][m] += 1.0;
}
}
for(int i = y - 1; i >= 0; i--) {
for(int k = 0; k <= m; k++)
f[x][i][k] += 0.5 * (f[x][i + 1][k] + f[x + 1][i][k]);
f[x][i][m] += 1.0;
}
for(int k = 0; k <= m; k++)
f[x][m][k] = f[x][0][k];
for(int i = m - 1; i>y; i--) {
for(int k = 0; k <= m; k++)
f[x][i][k] += 0.5 * (f[x][i + 1][k] + f[x + 1][i][k]);
f[x][i][m] += 1.0;
}
for(int i = x - 1; i >= 0; i--) {
double d = 0.5;
for(int j = 0; j < m; j++,d *= 0.5)
for(int k = 0; k <= m; k++)
f[i][0][k] += d * f[i + 1][j][k];
d *= 2;
f[i][0][m] += 2.0 - d * 2.0;
for(int k = 0; k <= m; k++)
f[i][m][k] = (f[i][0][k] *= 1.0 / (1.0 - d));
for(int j = m - 1; j > 0; j--) {
for(int k = 0; k <= m; k++)
f[i][j][k] += 0.5 * (f[i][j + 1][k] + f[i + 1][j][k]);
f[i][j][m] += 1.0;
}
}
memcpy(d,f[0],sizeof(d));
cnt = m - 1;
for(int k = 0; k < m; k++) d[k][k] -= 1.0;
gauss();
printf("%.6lf\n",-d[0][m]/d[0][0]);
return 0;
}
Problem A: Apple(高斯消元)的更多相关文章
- HihoCoder 1195 高斯消元·一(高斯消元)
题意 https://hihocoder.com/problemset/problem/1195 思路 高斯消元是解决高元方程的一种算法,复杂度 \(O(n^3)\) . 过程大致是: 构造一个未知数 ...
- 【POJ】1830 开关问题(高斯消元)
http://poj.org/problem?id=1830 高斯消元无解的条件:当存在非法的左式=0而右式不等于0的情况,即为非法.这个可以在消元后,对没有使用过的方程验证是否右式不等于0(此时因为 ...
- POJ 1681---Painter's Problem(高斯消元)
POJ 1681---Painter's Problem(高斯消元) Description There is a square wall which is made of n*n small s ...
- POJ 1681 Painter's Problem(高斯消元+枚举自由变元)
http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...
- POJ 1681 Painter's Problem 【高斯消元 二进制枚举】
任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS Memory Limit: 10000K Total ...
- poj 1681 Painter's Problem(高斯消元)
id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...
- POJ - 1681: Painter's Problem (开关问题-高斯消元)
pro:开关问题,同上一题. 不过只要求输出最小的操作步数,无法完成输出“inf” sol:高斯消元的解对应的一组合法的最小操作步数. #include<bits/stdc++.h> #d ...
- HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4818 深深地补一个坑~~~ 现场赛坑在这题了,TAT.... 今天把代码改了下,过掉了,TAT 很明显 ...
- UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
随机推荐
- 帝国CMS系统标签e:loop调用的附加SQL条件和排序参数
帝国CMS6.5以上版本在原来所有信息调用标签基础上增加了两个标签参数:“附加SQL条件”和“显示排序”.支持这两个参数的标签有如下:ecmsinfo.灵动标签.phomenews.phomenews ...
- mysql数据库查询和聚合函数
1.模糊查询 like % 表示多个任意字符 _ 表示任意一个字符 例如:查询黄姓同学 select * from student where name '黄%' select * from stud ...
- 数据库中无数据时查询数据为空,但出现空指针异常的解决方案(转载https://blueskator.iteye.com/blog/2096026)
异常:java.lang.NullPointerException 解决方案: try{ hotelImageList = ihotelImgManager.query(hiqc); }catch(E ...
- 利用Python代码编写计算器小程序
import tkinter import tkinter.messagebox import math class JSQ: def __init__(self): #创建主界面 self.root ...
- .singleton.php 文件 (单例模式可被继承 代码实例)
<?phpnamespace lib;abstract class Singleton{ //设置一个私有的静态属性作为中间变量 private static $instancePool = [ ...
- 查看那些进程使用了swap
https://blog.csdn.net/xiangliangyu/article/details/8213127$ sudo pacman -S iotop https://blog.longwi ...
- 【开发】iOS入门 - Touch事件处理学习笔记
网上介绍iOS事件机制的文章,有不少都讲得很好,搬运一次意义不大,这里我就列一些要点吧. 跟Android一样,iOS的Touch事件也是从外到内传递,然后从内到外响应,可以看成一个U型结构.然而,个 ...
- 找出n之内的完全数, 并输出其因子
定义: 完全数:所有的真因子(即除了自身以外的约数)的和,恰好等于它本身.例如:第一个完全数是6,它有约数1.2.3.6,除去它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1 ...
- JAVA基础搬运工
1Java线程的6种状态及切换 https://blog.csdn.net/pange1991/article/details/53860651/ 2进程和线程的区别 https://www.cnbl ...
- Django学习笔记之视图高级-CSV文件生成
生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...