博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4079 : [Wf2014]Pachinko
阅读量:4578 次
发布时间:2019-06-08

本文共 1096 字,大约阅读时间需要 3 分钟。

列出$n\times m$个未知量、$n\times m$个方程的方程组进行高斯消元。

注意到每次消元时只会影响前后$m$个方程,故只保存增广矩阵中的这些项,同时只对这些项进行消元即可。

时间复杂度$O(nm^3)$。

 

#include
#include
#include
using namespace std;const int N=10010,M=23;const double eps=1e-12;int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};int n,m,i,j,k,x,y,o,l,r,cnt,pos[N*M],v[N*M];double p[4],t,a[N*M][M*2],g[N*M];char s[N][M];inline double&f(int x,int y){return a[x][x-y+M];}int main(){ scanf("%d%d",&m,&n); for(i=0;i<4;i++)scanf("%lf",&p[i]),p[i]/=100; for(i=0;i
=n||y<0||y>=m||s[x][y]=='X')f(o,o)-=p[k]; else if(s[x][y]=='.')f(o,x*m+y)-=p[k^1]; } if(s[i][j]=='T')f(o,o)=1; } for(i=0;i
eps){k=j;break;} if(k<0){pos[i]=-1;continue;} v[pos[i]=k]=1; for(j=k+1;j<=r;j++){ t=f(j,i)/f(k,i); for(x=i;x
<=k+m;x++)f(j,x)-=f(k,x)*t; g[j]-=g[k]*t; } } for(i=n*m-1;~i;i--)if(~pos[i]){ k=pos[i],l=max(0,i-m),r=min(n*m-1,i+m); for(j=l;j<=r;j++)if(j!=k)g[k]-=f(k,j)*g[j]; g[k]/=f(k,i); } for(i=0;i

  

转载于:https://www.cnblogs.com/clrs97/p/6656324.html

你可能感兴趣的文章
如何更改webstrom的默认端口63342
查看>>
最短路计数
查看>>
SharedPreferences
查看>>
Android性能优化方法(六)
查看>>
JQ在线引用地址
查看>>
TCP协议
查看>>
高级IO-锁与进程和文件
查看>>
uva 11795 Mega Man's Mission(动态规划-状态压缩DP)
查看>>
gc日志分析
查看>>
数据结构--栈的思想与数组实现
查看>>
javascript的构造函数和原型
查看>>
详解C#break ,continue, return
查看>>
Python如何发布程序
查看>>
java中使用session的一些细节
查看>>
浏览器输入服务器端口号来访问html网页
查看>>
hdu 6435 CSGO(最大曼哈顿距离)
查看>>
logback框架之——日志分割所带来的潜在问题
查看>>
链路追踪工具之Zipkin学习小记
查看>>
iOS中通讯录的开发
查看>>
怎么让table中的<td>内容向上对齐
查看>>