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 ...
随机推荐
- ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯)
中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 7个7个分剩2个 问这个物品有多少个 解这题,我们需要构造一个答案 我们需要构造这 ...
- vue & button & refs & click & bug
vue & button & refs & click & bug $refs.btn.click() ??? vue & refs $refs.btn.$em ...
- MacOS & dock 工具栏 & 外接显示器 & 主屏
MacOS & dock 工具栏 & 外接显示器 & 主屏 macos 如何将 dock工具栏从外接显示器拖回主屏 https://support.apple.com/zh-c ...
- 【Django】用pycharm初学习使用Django
开发框架流程 M V C(99%的开发都是这种流程.) 1.URL控制器 2.Views 视图 3.models 库 1.首先创建一个Django 2.创建成功后里面几个模块的功能 用它来 ...
- hdu6446 Tree and Permutation
没啥好说的,拆一下贡献就完事了.记dis(x,y)为树上x到y的最短路径,设长度为n的排列中有f(n)个里面x和y相邻(不考虑x和y的顺序),那么f(n)=(n-2)! (n-1) 2,显然这个f(n ...
- Nastya Studies Informatics CodeForces - 992B(增长姿势)
有增长姿势了 如果a * b == lcm * gcd 那么a和b为lcm因数 这个我之前真不知道emm... #include <bits/stdc++.h> #define mem( ...
- MT【135】条件线性化
已知\(x,y>0,\dfrac{1}{x}+\dfrac{2}{y}=1\),求\(\dfrac{1}{x+1}+\dfrac{2}{y+1}\)的最大值_____ 解答:令\(a=\dfra ...
- MT【118】利用线面角最小解题
解:如图将正四面体放到立方体中,让AB通过$\alpha$面,让$\alpha$面绕着AB动起来.问题就转化成为EF与面$\alpha$线面角$\theta$了.EF的投影为$|EF|cos\thet ...
- 【刷题】BZOJ 4816 [Sdoi2017]数字表格
Description Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师 ...
- [洛谷P4819][中山市选]杀人游戏
题目大意:有一张$n$个点$m$条边的有向图,有一个关键点,如果你访问一个点,你会知道它连出的边中有没有关键点,以及若有的话是哪个.问最优策略下不访问关键点而知道关键点的概率 题解:发现若一个点不是关 ...