C. Connect Three(构造)
题目链接:http://codeforces.com/contest/1087/problem/C
题目大意:给你三个点的坐标,让你用尽可能少的方块,让这三个点连起来。
具体思路: 我们先对这三个点进行排序,我们先选定第二个点,记录一下所有的点中,y的最小和最大,对于第二个点,我们竖着建立一个长度为(y的最大值-y的最小值+1)的长度,这一条的x坐标是第二个点的x坐标,然后剩下的第一个点和第三个点直接连向这个条就可以了。
AC代码:
#include <iostream>
#include <string>
#include <deque>
#include <stack>
#include<cmath>
#include <algorithm>
#include<map>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
vector<pair<int,int> >vis;
map<pair<int,int>,bool>ju;
struct node
{
int x;
int y;
} q[];
bool cmp(node t1,node t2)
{
if(t1.x==t2.x)
return t1.y<t2.y;
return t1.x<t2.x;
}
int main()
{
int x1,y1,x2,y2,x3,y3;
cin>>x1>>y1;
cin>>x2>>y2;
cin>>x3>>y3;
int miny=inf,maxy=;
miny=min(miny,y1);
miny=min(miny,y2);
miny=min(miny,y3);
maxy=max(maxy,y1);
maxy=max(maxy,y2);
maxy=max(maxy,y3);
int num=;
q[].x=x1;
q[].y=y1;
q[].x=x2;
q[].y=y2;
q[].x=x3;
q[].y=y3;
sort(q+,q+,cmp);
for(int i=miny; i<=maxy; i++)
{
if(ju[make_pair(q[].x,i)]==)
vis.push_back(make_pair(q[].x,i));
ju[make_pair(q[].x,i)]=;
// cout<<q[2].x<<" "<<i<<endl;
}
for(int i=q[].x; i<=q[].x; i++)
{
// cout<<i<<" "<<q[1].y<<endl;
if(ju[make_pair(i,q[].y)]==)
vis.push_back(make_pair(i,q[].y));
ju[make_pair(i,q[].y)]=;
}
for(int i=q[].x; i<=q[].x; i++)
{
if(ju[make_pair(i,q[].y)]==)
vis.push_back(make_pair(i,q[].y));
ju[make_pair(i,q[].y)]=;
// cout<<i<<" "<<q[3].y<<endl;
}
cout<<vis.size()<<endl;
for(auto i:vis)
{
cout<<i.first<<" "<<i.second<<endl;
}
// for(int i=0; i<=1000; i++)
// {
// for(int j=0; j<=1000; j++)
// {
// if(vis[make_pair(i,j)]==0)
// continue;
// cout<<i<<" "<<j<<endl;
// }
// }
return ;
}
C. Connect Three(构造)的更多相关文章
- 利用Connect By构造数列
,) yymm ;
- Java 线程并发策略
1 什么是并发问题. 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题. 2 java中synchronized的用法 用法1 public class Test{ public ...
- java io读书笔记(8)FileInputStream/FileOutputStream的应用
转自:http://www.cnblogs.com/jjtech/archive/2011/04/17/2019210.html 这是一对继承于InputStream和OutputStream的类,用 ...
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
. 显示系统中全部Android平台: android list targets . 显示系统中全部AVD(模拟器): android list avd . 创建AVD(模拟器): android c ...
- Mysql数据实时同步
企业运维的数据库最常见的是 mysql;但是 mysql 有个缺陷:当数据量达到千万条的时候,mysql 的相关操作会变的非常迟缓; 如果这个时候有需求需要实时展示数据;对于 mysql 来说是一种灾 ...
- 【RPC】手撸一个简单的RPC框架实现
涉及技术 序列化.Socket通信.Java动态代理技术,反射机制 角色 1.服务提供者:运行在服务端,是真实的服务实现类 2.服务发布监听者:运行在RPC服务端,1将服务端提供的 ...
- java并发的处理方式
1 什么是并发问题. 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题. 银行两操作员同时操作同一账户就是典型的例子.比如A.B操作员同时读取一余额为1000元的账户,A操作员为该 ...
- FileInputStream/FileOutputStream的应用
这是一对继承于InputStream和OutputStream的类,用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象): 本地文件读写编程的基本过程为: ① 生成文 ...
- 面试王牌 JAVA并发
Java 并发 JavathreadSocketC#C++ 并发 Table of Contents 1 什么是并发问题. 2多线程死锁问题 2 java中synchronized的用法 3 Java ...
随机推荐
- NeuralEnhance: 提高图像分辨率的深度学习模型
NeuralEnhance是使用深度学习训练的提高图像分辨率的模型,使用Python开发,项目地址:https://github.com/alexjc/neural-enhance. 貌似很多电影都有 ...
- ACM数论之旅5---数论四大定理(你怕不怕(☆゚∀゚)老实告诉我)
(本篇无证明,想要证明的去找度娘)o(*≧▽≦)ツ ----------数论四大定理--------- 数论四大定理: 1.威尔逊定理 2.欧拉定理 3.孙子定理(中国剩余定理) 4.费马小定理 (提 ...
- 【大数据】Kafka学习笔记
第1章 Kafka概述 1.1 消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息 ...
- BZOJ2878 NOI2012迷失游乐园(树形dp+环套树+概率期望)
考虑树的部分分怎么做.令f[i]为i向子树内走的期望路径长度,转移比较显然.算答案时先把其父亲的答案弄好就可以统计自己的答案了. 环套树也类似.树里直接dp,对环上点暴力考虑环上的每条路径,算完后再在 ...
- 文件同步工具 lsyncd2.1.6 安装使用问题
项目有文件实时同步备份的需求,做了一下调查,比较好的解决方法是使用lsyncd工具.这里主要记录一下遇到的问题及解决方法. lsyncd 的相关介绍和对比可见: lsyncd实时同步搭建指南——取代r ...
- 【BZOJ2839】集合计数(容斥,动态规划)
[BZOJ2839]集合计数(容斥,动态规划) 题面 BZOJ 权限题 Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使 ...
- 洛谷 P2389 电脑班的裁员 解题报告
题意: 给定一段长为N的序列,选取其中的至多M段使这些子段和最大. 当N=1000时,我们可以采用动态规划解法 令\(dp[i][j][k]\)代表当前选至位置\(i\)处于第\(j\)段当前是否选取 ...
- Android 如何从应用返回待机界面(HOME)
Intent mIntent = new Intent(); mIntent.setAction(Intent.ACTION_MAIN); mIntent.addCategory(Intent.CAT ...
- Web前端之CSS详解20180329
一.CSS概述 html显示效果有限,所以单独成立了一门语言就做css, css是层叠样式表,用来定义网页的显示想过,可以解决html代码对样式定义的重复, 简单来说就是,css将网页内容和显示样式进 ...
- NAT ------ 内网的主机如何通过路由器与外网的主机通信
内网主机A,路由器B,外网主机C 使用了两个协议: 路由:位于网络层,为数据包提供一个寻径的算法,不改变数据包的源IP和目的IP,但是会修改源MAC和目的MAC,只在同个网段的进行数据的转发 NAT: ...