NOIP 提高组【JZOJ 4777】灌水
来源:互联网 发布:plc能用c语言编程吗 编辑:程序博客网 时间:2024/06/05 19:05
Description
Data Constraint
Solution
我们枚举每2* 2块的情况。设左上角的坐标为(x,y)对于为0的块,我们先给(x,y)(x+2,y+2)的祖先加上π/4 ,然后将(x+1,y+1)与(x+2,y)(x,y+2)合并,给(x+1,y+1)的祖先加上4-π/2 。对于为1的块则同理,我们先给(x,y+2)(x+2,y)的祖先加上π/4 ,然后将(x+1,y+1)与(x,y)(x+2,y+2)合并,给(x+1,y+1)的祖先加上4-π/2 。对于祖先的查询用并查集即可。
代码
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int maxn=205;const double pai=3.1415926535898;int a[maxn][maxn],n,m,n1,m1,i,t,j,k,l,x,y,fa[maxn*maxn],p,q;char s[maxn];double size[maxn*maxn];int getfather(int x,double num){ size[x]+=num; if (fa[x]==x) return x; fa[x]=getfather(fa[x],num+size[x]); size[x]=0; return fa[x];}int main(){// freopen("data.in","r",stdin);freopen("data.out","w",stdout); scanf("%d%d\n",&n1,&m1); n=n1*2+1;m=m1*2+1; for (k=1;k<=n;k++) for (l=1;l<=m;l++) fa[(k-1)*m+l]=(k-1)*m+l; for (i=1;i<=n1;i++){ scanf("%s\n",s+1); for (j=1;j<=m1;j++){ x=i*2-1;y=j*2-1; if (s[j]=='0'){ p=getfather((x-1)*m+y,0); size[p]+=pai/4; size[x*m+y+1]+=4-pai/2; p=getfather((x+1)*m+y+2,0); size[p]+=pai/4; p=getfather((x-1)*m+y+2,0); q=fa[x*m+y+1]; if (p!=q) fa[p]=q,size[q]+=size[p],size[p]=0; p=getfather((x+1)*m+y,0); if (p!=q) fa[p]=q,size[q]+=size[p],size[p]=0; } else{ p=getfather((x-1)*m+y+2,0); size[p]+=pai/4; size[x*m+y+1]+=4-pai/2; p=getfather((x+1)*m+y,0); size[p]+=pai/4; p=getfather((x-1)*m+y,0); q=fa[x*m+y+1]; if (p!=q) fa[p]=q,size[q]+=size[p],size[p]=0; p=getfather((x+1)*m+y+2,0); if (p!=q) fa[p]=q,size[q]+=size[p],size[p]=0; } } } scanf("%d",&n); for (i=1;i<=n;i++){ scanf("%d%d",&x,&y);x++;y++; q=getfather((x-1)*m+y,0); printf("%.4lf\n",size[q]); }}
3 0
- NOIP 提高组【JZOJ 4777】灌水
- JZOJ 4777. 【NOIP2016提高A组模拟9.14】灌水
- NOIP 提高组【JZOJ 4783】Osu
- JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
- JZOJ 2017.12.09【NOIP提高组】模拟赛C组
- 【NOIP2016提高A组模拟9.14】灌水
- 【NOIP模拟】灌水
- NOIP提高组 单峰
- NOIP提高组 积木
- NOIP提高组 看电影
- NOIP提高组 鼎纹
- NOIP提高组 千帆渡
- NOIP提高组 Brothers
- NOIP提高组 Crisis
- NOIP提高组 Word
- NOIP提高组 闭门造车
- NOIP提高组 爬山
- 【NOIP提高组】爬山
- eclipse中建立servlet时会提示没有导入javax.servlet包解决办法
- Ubuntu下boot分区剩余空间不足解决
- 既爱又恨的inline-block
- LeetCode34. Search for a Range
- 线性插值
- NOIP 提高组【JZOJ 4777】灌水
- WAMP自定义端口号
- 解析static关键字
- JavaScript实现弹出层代码
- 微店笔试
- Android动画
- 2016/8/15-2016/8/26两周开发总结
- 01背包与完全背包结合
- 安卓小日记练习(4)其中一个item的点击事件(1)