博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1299 切孔机
阅读量:5077 次
发布时间:2019-06-12

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

题目描述

司令部的助理经常需要在大纸上切割各种形状的孔。他们刚刚购买了一台新的切孔机,该机比他们以前使用的要方便自由的多。他们想编写一个程序来求出经过一系列复杂的切孔后会发生什么情况,他们特别想知道纸上形成的孔的数量。

下图列出了经过切割后形成的一些图样。

Two holes Two holes one hole one hole

输入格式

输入文件第一行是一个整数N,表示切纸操作的次数,1≤N≤100。接下来的N行中每行给出一个精确的切割操作,每次切割都给出了用空格隔开的四个整数,x1,y1,x2,y2,-1000≤x1,y1,x2,y2≤1000。x1和y1是切割线开始处的坐标值,x2和y2是切割线结束时的坐标值。你可以假设所有的切割点都在纸上,不会出界。每次切割都平行于纸上的x和y坐标轴。

输出格式

对于每次切割操作,要求输出纸上留下的单独的孔数。注意任何孔的最小面积不低于1平方单位。

输入输出样例

输入 #1复制
40 1 1 11 1 1 01 0 0 00 0 0 1
输出 #1复制
1
#include
using namespace std;typedef long long ll;const ll xx[4]={-1,1,0,0},yy[4]={
0,0,-1,1};struct point{ ll number,x,y; point() {} point(ll a,ll b):x(a),y(b) {}};struct picture{ bool can_go[4],visit; picture() { can_go[0]=can_go[1]=can_go[2]=can_go[3]=1; visit=1; }};ll n;point a[205];picture b[205][205];inline bool cmpx(point a,point b){ return a.x
q; q.push(point(0,0)); while(!q.empty()) { point now=q.front(); q.pop(); for(int i=0;i<4;i++) { ll x=now.x+xx[i],y=now.y+yy[i]; if(x<0||x>200||y<0||y>200) continue; if(!b[x][y].visit) continue; if(!b[now.x][now.y].can_go[i]) continue; b[x][y].visit=0; q.push(point(x,y)); } }}inline void bfs(ll dx,ll dy){ queue
q; b[dx][dy].visit=0; q.push(point(dx,dy)); while(!q.empty()) { point now=q.front(); q.pop(); for(int i=0;i<4;i++) { ll x=now.x+xx[i],y=now.y+yy[i]; if(x<0||x>200||y<0||y>200) continue; if(!b[x][y].visit) continue; b[x][y].visit=0; q.push(point(x,y)); } }}inline ll count_hole(){ ll ans=0; for(ll i=0;i<=200;i++) for(ll j=0;j<=200;j++) { if(!b[i][j].visit) continue; ans++; bfs(i,j); } return ans;}int main(){ ready(); lisan(); build_wall(); cut_paper(); ll ans=count_hole(); printf("%lld\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/hrj1/p/11494660.html

你可能感兴趣的文章
Opengles2.0入门
查看>>
linux下对qt编写的程序进行部署
查看>>
Asp.Net MVC学习总结(一)——Asp.Net MVC简单入门
查看>>
图像的上采样 下采样
查看>>
iPhone手机相关知识
查看>>
bzoj 2049: [Sdoi2008]Cave 洞穴勘测
查看>>
tp3.2 页面Windows正常 linux异常,页面找不到
查看>>
angularJS(2)
查看>>
centos安装——usb安装技术问题整理
查看>>
C#二维码与条形码的生成
查看>>
【leetcode】Container With Most Water
查看>>
如何熟悉一个项目?
查看>>
用户类热门排行榜特效
查看>>
Java基础学习,一些零散的笔记之Java的包
查看>>
Android工作学习第5天之TabHost实现菜单栏底部显示
查看>>
小巧精致的ASP.Net分页控件
查看>>
WPF/MVVM 快速开始指南(译)(转)
查看>>
Angular1.0路由的Hashbang和HTML5模式
查看>>
uboot配置过程详解1
查看>>
ajax复选框的选中添加
查看>>