分析:暴力的方法是非常显然的,从起点走一次,从终点走一次,路径相交的点即为所求,但是这样存图都很难存下,而且如果数据极端可能要求R*C次,时间空间都受不了.如果不需要记录整张图,并且一次能移动很多步就好了,标程用了树状数组+set,我不是很懂,只能打一个暴力了.

暴力:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
const int maxn = ;
const int dx[] = { , , , - };
const int dy[] = { , -, , };
int n, m, A, B, ansx, ansy, cnt;
bool vis[maxn][maxn]; //512M的内存这数组应该是极限了.
int a[maxn][maxn]; struct node
{
int x, y;
}e[maxn]; bool cmp(node a, node b)
{
if (a.x == b.x)
return a.y < b.y;
return a.x < b.x;
} void solve1()
{
int x = , y = , dir = ;
while ()
{
if (a[x][y] == )
dir = - dir;
if (a[x][y] == )
dir = (dir + ) % ;
vis[x][y] = ;
x = x + dx[dir], y = y + dy[dir];
if (x > n || y > m || x < || y < )
{
ansx = x;
ansy = y;
return;
}
}
} void solve2()
{
int x = n, y = m, dir = ;
while ()
{
if (a[x][y] == )
dir = - dir;
if (a[x][y] == )
dir = (dir + ) % ;
if (vis[x][y] && !a[x][y])
{
e[++cnt].x = x;
e[cnt].y = y;
vis[x][y] = ;
}
x += dx[dir], y += dy[dir];
if (x > n || y > m || x < || y < )
return;
}
} int main()
{
while (scanf("%d", &n) != EOF)
{
scanf("%d%d%d", &m, &A, &B);
cnt = ;
ansx = ;
ansy = ;
//memset(vis, 0, sizeof(vis));
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
vis[i][j] = a[i][j] = ;
//memset(a, 0, sizeof(a));
for (int i = ; i <= A; i++)
{
int x, y;
scanf("%d%d", &x, &y);
a[x][y] = ;
}
for (int i = ; i <= B; i++)
{
int x, y;
scanf("%d%d", &x, &y);
a[x][y] = ;
}
solve1();
if (ansx == n && ansy == m + )
{
printf("0\n");
continue;
}
solve2();
if (cnt == )
{
printf("-1\n");
continue;
}
sort(e + , e + + cnt, cmp);
printf("%d %d %d\n", cnt, e[].x, e[].y);
} return ;
}

std:

#include<cstdio>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
#define rep(i,n) for (int i=0;i<n;++i)
#define pb push_back
#define mk make_pair
#define X first
#define Y second
#define tree int t,int l,int r
#define left t*2,l,mid
#define right t*2+1,mid+1,r
#define M int mid=l+r>>1
const int N=;
typedef pair<int,int> pr;
typedef vector<pair<int,pr> > seq;
set<pr> a[N],b[N]; seq f1,g1,f2,g2; int Case,n,m,R,C,x,y,ll,rr,c[N]; long long ans;
int get(int x){int res=; for (;x;x-=x&-x) res+=c[x]; return res;}
void add(int x,int v){for (;x<=C;x+=x&-x) c[x]+=v;}
void ins(int side){scanf("%d%d",&x,&y),a[x].insert(mk(y,side)),b[y].insert(mk(x,side));}
bool track(int x,int y,int d,seq &f,seq &g)
{
f.clear(),g.clear(); set<pr> :: iterator it;
for (;;){
if (d&){
if (d==){
it=b[y].upper_bound(mk(x,)); f.pb(mk(x+,mk(y,)));
if (it==b[y].end()) return f.pb(mk(R+,mk(y,-))),;
f.pb(mk(it->X,mk(y,-))),x=it->X,d=it->Y?:;
}else{
it=b[y].lower_bound(mk(x,)); f.pb(mk(x,mk(y,-)));
if (it==b[y].begin()) return f.pb(mk(,mk(y,))),; --it;
f.pb(mk(it->X+,mk(y,))),x=it->X,d=it->Y?:;
}
}else{
if (d==){
it=a[x].upper_bound(mk(y,));
if (it==a[x].end()) return g.pb(mk(x,mk(y+,C))),x==R;
g.pb(mk(x,mk(y+,it->X-))),y=it->X,d=it->Y?:;
}else{
it=a[x].lower_bound(mk(y,));
if (it==a[x].begin()) return g.pb(mk(x,mk(,y-))),; --it;
g.pb(mk(x,mk(it->X+,y-))),y=it->X,d=it->Y?:;
}
}
}
}
void work(seq &f,seq &g)
{
sort(f.begin(),f.end()),sort(g.begin(),g.end());
int m=f.size(),n=g.size(),j=;
rep(i,n){
while (j<m && f[j].X<=g[i].X) add(f[j].Y.X,f[j].Y.Y),++j;
ll=g[i].Y.X,rr=g[i].Y.Y; int res=get(rr)-get(ll-); ans+=res;
if (g[i].X<x && res){
x=g[i].X,y=ll;
for (int j=;j>=;--j)
if (y+(<<j)<=rr && !(get(y-+(<<j))-get(y-))) y+=<<j;
}
}
while (j<m) add(f[j].Y.X,f[j].Y.Y),++j;
}
int main()
{
freopen("safe.in", "r", stdin);
freopen("safe.out", "w", stdout); while (scanf("%d%d%d%d",&R,&C,&n,&m)!=EOF){
rep(i,R+) a[i].clear(); rep(j,C+) b[j].clear();
rep(i,n+m) ins(i<n);
if (track(,,,f1,g1)){puts(""); continue;} track(R,C+,,f2,g2);
ans=,x=R+,work(f1,g2),work(f2,g1);
if (ans) printf("%lld %d %d\n",ans,x,y); else puts("-1");
}
return ;
}

noip模拟赛 柜(暴力)的更多相关文章

  1. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对   描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...

  2. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

  5. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  6. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)

    A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...

  7. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  8. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  9. NOIP模拟赛-2018.11.5

    NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...

随机推荐

  1. Windows 使用之那些你还不知道操作

    作者:你未读 整理:君未读 关于使用 win 系统的基本普及. 建议更换 win10 系统 可能很多朋友看到这个建议,心里很不爽,还很不服气,别急,且看官方给出的信息. 也就是说在 2019 年你完全 ...

  2. [ZJOI2006]GameZ游戏排名系统

    Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...

  3. 用 NPOI 组件实现数据导出

    利用 Nuget 安装 NPOI 组件. 所需引用的 dll:ICSharpCode.SharpZipLib.dll.NPOI.dll.NPOI.OOXML.dll.NPOI.OpenXml4Net. ...

  4. python调用chrome ie等浏览器

    chrome: 首先,要安装下谷歌浏览器,查看谷歌浏览器的版本,对应版本下载相应的chromedriver插件,http://blog.csdn.net/huilan_same/article/det ...

  5. oracle 自定义类型 type / create type

    一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...

  6. EasyUI系列学习(七)-Linkbutton(按钮)

    一.加载组件 1.使用class加载 <a href="#" class="easyui-linkbutton">按钮</a> 2.使用 ...

  7. 【alert(1) to win】不完全攻略

    alert(1) to win 一个练习XSS的平台,地址:https://alf.nu/alert1 Warmup 给出了一段JavaScript代码 function escape(s) { re ...

  8. MFC_2.4 组合框和图片控件

    组合框和图片控件 1.拖控件 图片属性更改Type 为Bitmap 名字也要改,不能为IDC_STATIC 绑定变量控件,重命名. 2.初始化 // 设置一个定时器,用于更新图片 SetTimer(0 ...

  9. PhpStorm 本地管理提交码云和GitHub代码仓库

    参考地址:https://www.yflad.cn/1766.html 1:下载Git客户端 2:打开PhpStorm,设置,Version Control → Git.配置git执行文件的路径.gi ...

  10. Redis系列(十一)--阿里云开发规范

    本文主要介绍阿里云Redis的开发规范,主要从以下几个方面说明: 1.键值设计 2.命令使用 3.客户端使用 4.相关工具 一.键值设计 1.key name设计 1).[建议]:可读性和可管理性 以 ...