传送门

这是复习普及组的时候做过的题了。

之前一直觉得很难码没有去做。

现在发现可以用并查集直接水过去。

其实就是把题目中说的连通的部分的面积用带权并查集维护一下就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=105;
const double Big=1.214601836602552,Small=0.785398163397;
int n,m,stat[N][N],fa[N*N*4+5],id[N<<1][N<<1];
double siz[N*N*4+N];
char s[N];
inline int find(int x){return x==fa[x]?fa[x]:fa[x]=find(fa[x]);}
inline int idx(int a,int b,int c){return ((a-1)*m+b)*4+c;}
inline void merge(int a1,int b1,int c1,int a2,int b2,int c2){
	if(!a1||!b1||!a2||!b2||a1>n||a2>n||b1>m||b2>m)return;
	int fx=find(idx(a1,b1,c1)),fy=find(idx(a2,b2,c2));
	if(fx^fy)fa[fx]=fy,siz[fy]+=siz[fx];
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;++i){
		scanf("%s",s+1);
		for(int j=1;j<=m;++j){
			stat[i][j]=s[j]^48;
			for(int k=1;k<=4;++k)fa[idx(i,j,k)]=idx(i,j,k);
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			if(!stat[i][j]){
				siz[idx(i,j,1)]=siz[idx(i,j,4)]=Small;
				siz[idx(i,j,2)]=siz[idx(i,j,3)]=Big;
				merge(i,j,2,i,j,3);
			}
			else{
				siz[idx(i,j,1)]=siz[idx(i,j,4)]=Big;
				siz[idx(i,j,2)]=siz[idx(i,j,3)]=Small;
				merge(i,j,1,i,j,4);
			}
			merge(i,j,1,i-1,j,3),merge(i,j,2,i-1,j,4);
			merge(i,j,1,i,j-1,2),merge(i,j,3,i,j-1,4);
			id[(i-1)<<1][(j-1)<<1]=idx(i,j,1);
			id[(i-1)<<1][j<<1]=idx(i,j,2);
			id[i<<1][(j-1)<<1]=idx(i,j,3);
			id[i<<1][j<<1]=idx(i,j,4);
			id[(i<<1)-1][(j<<1)-1]=idx(i,j,stat[i][j]+3);
		}
	}
	for(int i=read(),x,y;i;--i)x=read(),y=read(),printf("%.4lf\n",(x+y)&1?0.000:siz[find(id[x][y])]);
	return 0;
}

2018.11.04 NOIP训练 小水塘(并查集)的更多相关文章

  1. 2018.11.02 NOIP训练 停车场(线段树)

    传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续0101 ...

  2. 2018.11.01 NOIP训练 树的排列(树形dp)

    传送门 跟这道题差不多. 只不过是让权值小的儿子做权值大的儿子的父亲而已. 代码

  3. 2018.11.01 NOIP训练 图论(线段树+倍增+dfs序)

    传送门 一道挺妙的题. 对于询问点(u,v),如右图所示,我们可以发现存在一个点m在u->v的路径中,m子树的点到u是最近的,m子树外到v是最近的.其中dis(u,m)=(dis(u,v)-1) ...

  4. 2018.11.01 NOIP训练 木棒分组(搜索+剪枝)

    传送门 测试搜索的时候状态定义错了233. 我们把木棒从大到小排序. 然后保证每一组搜到的木棒出现的长度是从大到小递减的. 直接定义现在搜的木棒从什么位置开始,当前这一组的总长度,之前几组的总长度. ...

  5. 2018.11.07 NOIP训练 L的鞋子(权值分块+莫队)

    传送门 乱搞题. 我直接对权值分块+莫队水过了. 不过调了30min30min30min发现ststst表挂了是真的不想说什么233. 代码

  6. 2018.11.07 NOIP训练 lzy的游戏(01背包)

    传送门 考虑对于每次最后全部选完之后剩下的牌的集合都对应着一种构造方法. 一个更接地气的说法: 设消耗的牌数为ttt,如果使用的牌的lll值之和也为ttt,则对应着一种构造方式让这种情形成立. 于是做 ...

  7. 2018.11.06 NOIP训练 简单的计数问题(计数dp)

    传送门 直接f[i][j]f[i][j]f[i][j]表示已经到第iii个位置已经找到jjj个的方案数. 简单转移一下就行了. 代码

  8. 2018.11.06 NOIP训练 最大获利(profit)(01分数规划+最大权闭合子图)

    传送门 好题啊. ∑i<jpi,jK∗(200−K)>X\frac{\sum_{i<j}p_{i,j}}{K*(200-K)}>XK∗(200−K)∑i<j​pi,j​​ ...

  9. 2018.11.01 NOIP训练 梭哈(模拟)

    传送门 这题貌似不考智商啊. 直接按题意写就可以了. 事实上把牌从小到大排序之后写起来很舒服的. 然后就是有些地方可以人脑减代码量和判断次数. (提示:满堂红和某几种同类型的牌的大小判断) 然后注意A ...

随机推荐

  1. HDU-1212.BigNumber(有关模数的定理)

    本题大意:给出一个1000位以内的大数和一个小数,让你计算并给出大数对小数取余的结果. 本题思路:由下面的公式可以推出本题的计算公式,套入即可解决,建议自己把这个公式推一下,很简单的... 参考代码: ...

  2. vue router返回上一页

    this.$router.go(-1) 不用router时,使用window.history.go(-1);

  3. 7.27-8.10 Problems

    这是之前记录在word里的问题,现在誊到博客里.温故知新.时常回顾问题. 7.27 Bootstrap validator remote 验证出错 用Bootstrap validator插件验证表单 ...

  4. C#实现发送给QQ邮件

    最近在做一个通过点击忘记密码往用户邮箱中发邮件(邮件内容是一个超链接)点击进行修改的功能,发送原理,我们只是把邮件发送给smtp服务器,然后再由smtp服务器发送到邮箱,发送之前要校验一下. 1.微软 ...

  5. c# sharpsvn 客户端开发总结

    判断文件夹是否是 working copy 工作副本两个方法 if (!IsWorkingCopy(localPath))//查看某目录是否是受svn管理的状态, 即是否为工作副本 { notiny ...

  6. layer.confirm在ASP.NET控件onclick上面的应用方法

    有些时候,你可能要修改控件的事件,元素本身.等,这个时候如何操作呢?下面提供一个思路: <asp:LinkButton Visible="false" ID="sh ...

  7. C++11并发编程实战 免费书籍

    C++11 博客http://www.cnblogs.com/haippy/p/3284540.html 网上推荐的C++多线程基本都是C++ Concurrency in Action 英文版的,中 ...

  8. 虚拟机安装oracle重新启动后oracle em起不来 ORA-01034: ORACLE not available

    (转)http://zhidao.baidu.com/link?url=hM74OA-oWNGGx6RcDaGBwB8Hs0bAnVeKxpC6gpoCGtIGJZ8duYcC-YJ1WNCF7lkP ...

  9. PAT 1018 锤子剪刀布(20)

    1018 锤子剪刀布 (20)(20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方 ...

  10. spring boot (二):使用fastJson解析json数据

    如果我们想在spring boot中使用第三方的json解析框架: 1)我们需要在pom.xml文件中引入第三方包的依赖; 2)实现方法: 方法1 需要在启动类中继承WebMvcConfigurerA ...