题意:

网格图选中三个格,让你选中一些格子把这三个格子连起来,使得选中的格子总数最小。最后输出方案

网格范围为1000

思路:

首先两点间连起来最少需要的格子为他们的曼哈顿距离

然后连接方案一定是曼哈顿距离最短的两个点先连上,然后第三个点再接过去

然后题目就是求第三个点接到的那个点pos,答案就是path(a,pos)+path(b,pos)+path(c,pos)

求pos有两种方法

方法一:O(n2)

1e6枚举pos求最短即可,也能过

方法二:O(n)

首先第三个点一定在前两个点组成的矩形之外的,(不然他就不是第三个点了)

POS一定在前两个点组成的矩形的边界上,也是枚举即可。。

我写臭了。。还分了八个象限两种情况写的,可以参考一下添加路径的代码

其实比赛就是这样,口嗨能过就赶紧写,想优化说不定会花更长时间

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0); vector<PI>ans;
PI a[];
int d(PI a, PI b){
return abs(a.fst-b.fst)+abs(a.sc-b.sc);
}
void link(PI a, PI b){
int x = a.fst;
int y = a.sc;
int dx,dy;
//printf("a:%d %d\nb:%d %d\n",x,y,b.fst,b.sc);
while(make_pair(x,y)!=b){
if(b.fst==x)dx=;
else dx=abs(b.fst-x)/(b.fst-x);
if(b.sc==y)dy=;
else dy=abs(b.sc-y)/(b.sc-y); if(dx!=)x+=dx;
else y+=dy;
//printf("yeh:%d %d\n",x,y);
if(x==b.fst&&y==b.sc)break;
ans.pb(make_pair(x,y));
}
return;
}
bool cmp(PI a, PI b){
if(a.fst==b.fst)return a.sc<b.sc;
return a.fst < b.fst;
}
int main(){
for(int i = ; i <= ; i++){
scanf("%d %d", &a[i].fst, &a[i].sc);
ans.pb(a[i]);
} int d1 = d(a[],a[]);
int d2 = d(a[],a[]);
int d3 = d(a[],a[]);
int dd = min(min(d1,d2),d3);
if(dd==d3){
swap(a[],a[]);
}
else if(dd == d2){
swap(a[],a[]);
}
PI pos=make_pair(-,-);
int x1 = min(a[].fst,a[].fst);int x2=max(a[].fst,a[].fst);
int y1 = min(a[].sc,a[].sc);int y2=max(a[].sc,a[].sc);
for(int i = ; i <= ; i++){
//printf("i:%d %d %d\n",i,a[i].fst,a[i].sc);
}
//printf("%d %d %d %d\n",x1,x2,y1,y2);
for(int dx = ; dx <= ; dx++){
int x = a[].fst+dx;
int y = a[].sc;
//printf(" %d %d %d\n",dx,x,y);
if(x>=x1&&x<=x2&&y>=y1&&y<=y2){
pos = make_pair(x,y);break;
}
x = a[].fst-dx;
if(x>=x1&&x<=x2&&y>=y1&&y<=y2){
pos = make_pair(x,y);break;
}
}
//printf(" %d %d\n",pos.fst,pos.sc);
for(int dy = ; dy <= ; dy++){
int x = a[].fst;
int y = a[].sc+dy;
if(x>=x1&&x<=x2&&y>=y1&&y<=y2){
pos = make_pair(x,y);break;
}
y = a[].sc-dy;
if(x>=x1&&x<=x2&&y>=y1&&y<=y2){
pos = make_pair(x,y);break;
}
}//printf(" %d %d\n",pos.fst,pos.sc);
if(pos.fst==-){
PI b[];
b[] = make_pair(x1,y1);
b[] = make_pair(x1,y2);
b[] = make_pair(x2,y1);
b[] = make_pair(x2,y2);
int ttmp = inf;
int pp = -;
for(int i = ; i <= ; i++){
if(ttmp>d(a[],b[i])){
ttmp=d(a[],b[i]);
pp=i;
}
}
pos=b[pp];
}
//printf(" %d %d\n",pos.fst,pos.sc);
//printf(" %d\n",ans.size());
link(a[],pos);
link(a[],pos);
link(a[],pos); if(pos!=a[]&&pos!=a[]&&pos!=a[])ans.pb(pos);
printf("%d\n",ans.size());
sort(ans.begin(), ans.end(), cmp);
for(int i = ; i < (int)ans.size(); i++){
printf("%d %d\n",ans[i].fst,ans[i].sc);
}
return ;
} /* */

Codeforces 1087C Connect Three (思维+模拟)的更多相关文章

  1. codeforces 887A Div. 64 思维 模拟

    A. Div. 64 time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

  3. Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟

    传送门 https://codeforces.com/contest/1496/problem/B 题目 Example input 5 4 1 0 1 3 4 3 1 0 1 4 3 0 0 1 4 ...

  4. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  5. Codeforces 758D:Ability To Convert(思维+模拟)

    http://codeforces.com/problemset/problem/758/D 题意:给出一个进制数n,还有一个数k表示在n进制下的值,求将这个数转为十进制最小可以是多少. 思路:模拟着 ...

  6. Codeforces 758C:Unfair Poll(思维+模拟)

    http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...

  7. CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)

    ACM思维题训练集合 A new Berland businessman Vitaly is going to open a household appliances' store. All he's ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维

    题意:博弈题面  给出一个数字序列 (>=11)  有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢 第一个人先手  数字序列一定是奇 ...

  9. Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)

    C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...

随机推荐

  1. vue项目使用v-charts的柱形图的各种样式和数据配置

    找了很多网上关于v-charts的柱形图使用,我发现我一模一样的配置就是没有效果,我原来是按需引入的, import VeHistogram from 'v-charts/lib/histogram' ...

  2. 利用SSH桥接访问服务器的Docker运行的MySql服务

    前情提要 docker的运用越来广泛,许多IT公司都已经将自己的服务跑在Docker上面.在安全性方面又做了一层防护.比如:跑在Docker上的Mysql不做外网端口映射,只能在linux服务器上或进 ...

  3. 二分查找LintcodeNo14

    14First Position of Target 二分查找的基础题 STL lower_bound实现 class Solution { public: /** * @param nums: Th ...

  4. Fabric1.4:链码管理与测试

    1 链码介绍 智能合约在 Hyperledger Fabric 中称为链码(chaincode),是提供分布式账本的状态处理逻辑.链码被部署在fabric 的网络节点中,能够独立运行在具有安全特性的受 ...

  5. 8款极具表现力的jQuery/CSS3网页菜单

    上一篇我向大家分享了7款效果震憾的HTML5应用组件,今天主要来分享一下CSS3网页菜单,因为在一个网站中,菜单起着举足轻重的作用,所以作为WEB开发人员,我们有必要将网站的菜单设计得尽量完美,下面向 ...

  6. 2次方的期望dp

    某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(    我们来简化一下这个游戏的规则    有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个com ...

  7. hdu - 4965

    One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learni ...

  8. 通过VS2019使用Web部署发布.net core程序

    服务器:Windows Server2012R2 服务器已安装好IIS 需要启用Web Management Service  与 Web部署代理服务 服务器默认是没有Web部署代理服务的  需要安装 ...

  9. Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext

    目录 前言 1.容器简介 2.容器的结构 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ConfigurableApplicationContext 2.2 ...

  10. Mac下使用Matplotlib无法显示中文的解决办法

    参考:matplotlib图例中文乱码? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/25404709/answer/309784195 1.下载字体安 ...