BZOJ3046 : lagoon
码农题,拆点BFS预处理出所有联通块的面积即可,注意分类讨论。
- #include<cstdio>
- #include<cmath>
- using namespace std;
- const double pi=acos(-1.0)/4.0;
- const int N=210;
- struct P{int x,y,z;P(){}P(int _x,int _y,int _z){x=_x,y=_y,z=_z;}}q[N*N*2],p;
- int n,m,T,i,j,h,t,pos,c[N*N][3],v[N][N][3],a[N][N];char s[N];double sum[N*N],ans;
- void add(int x,int y,int z){
- if(!x||!y||x>n||y>m||v[x][y][z])return;
- v[x][y][z]=pos;
- c[pos][z]++;
- q[++t]=P(x,y,z);
- }
- void bfs(int x,int y,int z){
- h=1,t=0,add(x,y,z);
- while(h<=t){
- p=q[h++];
- if(!p.z){
- x=p.x-1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==3||a[x][y]==4)add(x,y,1);
- if(a[x][y]==1||a[x][y]==2)add(x,y,2);
- x=p.x+1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==2)add(x,y,1);
- if(a[x][y]==3||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y-1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==2||a[x][y]==3)add(x,y,1);
- if(a[x][y]==1||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y+1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==4)add(x,y,1);
- if(a[x][y]==2||a[x][y]==3)add(x,y,2);
- }
- if(p.z==1){
- if(a[p.x][p.y]==1){
- x=p.x-1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==3||a[x][y]==4)add(x,y,1);
- if(a[x][y]==1||a[x][y]==2)add(x,y,2);
- x=p.x,y=p.y-1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==2||a[x][y]==3)add(x,y,1);
- if(a[x][y]==1||a[x][y]==4)add(x,y,2);
- }
- if(a[p.x][p.y]==2){
- x=p.x-1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==3||a[x][y]==4)add(x,y,1);
- if(a[x][y]==1||a[x][y]==2)add(x,y,2);
- x=p.x,y=p.y+1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==4)add(x,y,1);
- if(a[x][y]==2||a[x][y]==3)add(x,y,2);
- }
- if(a[p.x][p.y]==3){
- x=p.x+1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==2)add(x,y,1);
- if(a[x][y]==3||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y+1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==4)add(x,y,1);
- if(a[x][y]==2||a[x][y]==3)add(x,y,2);
- }
- if(a[p.x][p.y]==4){
- x=p.x+1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==2)add(x,y,1);
- if(a[x][y]==3||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y-1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==2||a[x][y]==3)add(x,y,1);
- if(a[x][y]==1||a[x][y]==4)add(x,y,2);
- }
- }
- if(p.z==2){
- if(a[p.x][p.y]==1){
- x=p.x+1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==2)add(x,y,1);
- if(a[x][y]==3||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y+1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==4)add(x,y,1);
- if(a[x][y]==2||a[x][y]==3)add(x,y,2);
- }
- if(a[p.x][p.y]==2){
- x=p.x+1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==2)add(x,y,1);
- if(a[x][y]==3||a[x][y]==4)add(x,y,2);
- x=p.x,y=p.y-1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==2||a[x][y]==3)add(x,y,1);
- if(a[x][y]==1||a[x][y]==4)add(x,y,2);
- }
- if(a[p.x][p.y]==3){
- x=p.x-1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==3||a[x][y]==4)add(x,y,1);
- if(a[x][y]==1||a[x][y]==2)add(x,y,2);
- x=p.x,y=p.y-1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==2||a[x][y]==3)add(x,y,1);
- if(a[x][y]==1||a[x][y]==4)add(x,y,2);
- }
- if(a[p.x][p.y]==4){
- x=p.x-1,y=p.y;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==3||a[x][y]==4)add(x,y,1);
- if(a[x][y]==1||a[x][y]==2)add(x,y,2);
- x=p.x,y=p.y+1;
- if(!a[x][y])add(x,y,0);
- if(a[x][y]==1||a[x][y]==4)add(x,y,1);
- if(a[x][y]==2||a[x][y]==3)add(x,y,2);
- }
- }
- }
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(i=1;i<=n;i++){
- scanf("%s",s+1);
- for(j=1;j<=m;j++)if(s[j]=='0')a[i*2-1][j*2-1]=1,a[i*2][j*2]=3;
- else a[i*2-1][j*2]=2,a[i*2][j*2-1]=4;
- }
- n<<=1,m<<=1;
- for(i=1;i<=n;i++)for(j=1;j<=m;j++){
- if(!a[i][j]&&!v[i][j][0])++pos,bfs(i,j,0);
- if(a[i][j]&&!v[i][j][1])++pos,bfs(i,j,1);
- if(a[i][j]&&!v[i][j][2])++pos,bfs(i,j,2);
- }
- for(i=1;i<=pos;i++)sum[i]=c[i][0]+c[i][2]+(c[i][1]-c[i][2])*pi;
- scanf("%d",&T);
- while(T--){
- scanf("%d%d",&i,&j);
- if(a[i][j]==2||a[i][j]==4){puts("0.0000");continue;}
- if(a[i][j+1]==1||a[i][j+1]==3){puts("0.0000");continue;}
- if(a[i+1][j]==1||a[i+1][j]==3){puts("0.0000");continue;}
- if(a[i+1][j+1]==2||a[i+1][j+1]==4){puts("0.0000");continue;}
- if(!i&&!j){
- if(!a[1][1])ans=sum[v[1][1][0]];
- else if(a[1][1]==1)ans=sum[v[1][1][1]];
- else if(a[1][1]==3)ans=sum[v[1][1][2]];
- }else if(!i){
- if(!a[1][j])ans=sum[v[1][j][0]];
- else if(a[1][j]==2)ans=sum[v[1][j][1]];
- else if(a[1][j]==4)ans=sum[v[1][j][2]];
- }else if(!j){
- if(!a[i][1])ans=sum[v[i][1][0]];
- else if(a[i][1]==4)ans=sum[v[i][1][1]];
- else if(a[i][1]==2)ans=sum[v[i][1][2]];
- }else{
- if(!a[i][j])ans=sum[v[i][j][0]];
- else if(a[i][j]==3)ans=sum[v[i][j][1]];
- else if(a[i][j]==1)ans=sum[v[i][j][2]];
- }
- printf("%.4f\n",ans);
- }
- return 0;
- }
BZOJ3046 : lagoon的更多相关文章
- Cheap Hollister Clothing
(link to hollisterco site), Spectacles don't simply take care of the eye area inside sun; Putting th ...
- 最有效地优化 Microsoft SQL Server 的性能
为了最有效地优化 Microsoft SQL Server 的性能,您必须明确当情况不断变化时,性能将在哪些方面得到最大程度的改进,并集中分析这些方面.否则,在这些问题上您可能花费大量的时间和精力 ...
- [SinGuLaRiTy] Nescafe 24杯模拟赛
[SinGularLaRiTy-1044] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 小水塘(lagoon) 题目描述 忘川沧月的小水塘 ...
- List of CentOS Mirrors
From:https://www.centos.org/download/mirrors/ CentOS welcomes new mirror sites. If you are consideri ...
- 英语发音规则---字母组合oo的发音规律
英语发音规则---字母组合oo的发音规律 一.总结 一句话总结:在英语单词中,字母组合oo多数读长音/u:/,少数读短音/ʊ/.另外,还有极少数的特殊情况读/ʌ/, 在英语单词中,字母组合oo多数读长 ...
- 英语发音规则---oo
英语发音规则---oo 一.总结 一句话总结: 1.重读音节词尾的字母组合oo发音素[u:]的音? too [tu:] adv.太;也 zoo [zu:] n.动物园 room [ru:m] n.房间 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 五、Pandas玩转数据
Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...
- SFC游戏列表(维基百科)
SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...
随机推荐
- Android 中4种屏幕尺寸
具体信息,请参考 Android 官方文档 Supporting Multiple Screens small(屏幕尺寸小于3英寸左右的布局), normal(屏幕尺寸小于4.5英寸左右), lar ...
- FastReport安装说明(中文版)
FastReport安装说明(中文版) 内容列表 I. IntroductionI. 介绍II. Manual installing of the FastReport packagesII. 手动安 ...
- WPF 将PPT,Word转成图片
在Office下,PowerPoint可以直接把每张幻灯片转成图片,而Word不能直接保存图片.所以只能通过先转换成xps文件,然后再转成图片. 一.PPT 保存为图片 /// <summary ...
- Intellij Idea无法从Controller跳转到视图页面的解决方案
解决方案: 第一步,确认配置了Spring支持,如下图: 一般情况下,配置完上面就可以正常导航了,但是今天要说的不是一般情况,否则也就不说了,如果经过第一步设置后,还是不能正常导航的同学,可以接着看第 ...
- CodeForces - 420A (字符对称问题)
Start Up Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Sta ...
- HDU 5651 xiaoxin juju needs help (组合数)
xiaoxin juju needs helpTime Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSu ...
- Babelfish(poj 2503)
大致题意: 输入一个字典,字典格式为“英语à外语”的一一映射关系 然后输入若干个外语单词,输出他们的 英语翻译单词,如果字典中不存在这个单词,则输出“eh” #include<iostream& ...
- 开启InnoDB每表一个独立的表空间
mysql> show variables like '%innodb%'; +---------------------------------+----------------------- ...
- javascript栈的建立样码
早上参加小孩的一年级入学前,看看相关的东东啦.. function Stack() { var items = []; this.push = function(element){ items.pus ...
- oracle的启动过程(不分模式启动)
Oracle数据库的完整启动过程包含以下3个步骤: 简单地说,就是:启动实例-->加载数据库-->打开数据库. -------------------------------------- ...