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 ...
随机推荐
- react native onEndReached频繁多次调用问题
今天被这个问题搞得头疼,写一个分页加载,但是listview的onEndReached方法老是被频繁调用,知道加载完所有的分页数据才停止. <ListView automaticallyAdju ...
- JAVA日常之一
一.JDK安装及环境变量设置 下载jdk安装包,如jdk-8u65-windows-x64.exe,点击安装,记住安装路径如E:\Program Files\Java\jdk1.8.0_65: 打开环 ...
- axios 重复点击利用CancelToken阻止请求多次发送
import axios from 'axios'; axios.defaults.timeout = 5000; axios.defaults.baseURL =''; let pending = ...
- 前端---js02
主要内容 1.数组 2.字符串 3.Date日期对象 4.内置对象 5.定时器 6.DOM 7.伪数组 内置对象: 1 数组(列表) Array (1) 数组的创建 <script>//字 ...
- JVM垃圾收集器-Serial收集器
今天我给大家分享的是Serial收集器,垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商,不同的版本的虚拟机所提供的垃圾收集器都可能会有很大 ...
- ROS * 了解学习urdf的内容格式及编写
<?xml version="1.0" ?> 声明文件使用xml描述 <robot name="robot_name">定义这是一个机器 ...
- python基础——1、python背景及特点——(YZ)
在之前的两种编程语言(C.Java)的学习之后,迎来新的一种编程语言的学习,但毕竟本着学一样一定要认真学的精神(期望是这样)首先,最最最少不了的是了解编程语言的背景.范围.特点.功能,等等.经过阅读资 ...
- 用vs2010打开使用vs2013升级后的WP工程
项目在win7+vs2010的环境中建立的,后来在win8.1+vs2013的环境下修改和完善: 但是所有功能实现后发现wp7项目在使用vs2013打开后因为单向升级的原因,项目只能被编译为wp8项目 ...
- Java(全局变量-静态变量-位运算符)
全局变量是默认赋值的:而局部变量是没有默认赋值的(需要赋值才能使用)静态变量只能被静态方法使用 位运算右移,相当于做除法,2的n次幂00001000操作的位移数相当于是偏移量从右向左数n位,从第n+1 ...
- java基础(一):我对java的三个环境变量的简单理解和配置
首先说说java的三个环境变量:java_home,classpath,path java_home:jdk的安装路径[你一层一层点开安装路径,直到当前目录有一个bin目录,然后在地址栏里面右键单击复 ...