分析:暴力的方法是非常显然的,从起点走一次,从终点走一次,路径相交的点即为所求,但是这样存图都很难存下,而且如果数据极端可能要求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. P1606 [USACO07FEB]荷叶塘Lilypad Pond(最短路计数)

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...

  2. [App Store Connect帮助]六、测试 Beta 版本(2)输入测试信息以供外部测试

    如果您向外部测试员分发您的 App,您需要输入关于您 App 的额外 TestFlight 测试信息以供“Beta 版 App 审核”.您可以在添加 App 至您的帐户时,或在您邀请外部测试员时输入此 ...

  3. canvas particles

    var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var Grewer = { in ...

  4. [转]iOS WebKit browsers and auto-zooming form controls

    问题描述:https://github.com/jquery/jquery-mobile/issues/2581 本文转自:http://www.456bereastreet.com/archive/ ...

  5. Java多线程——线程的死锁

    Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...

  6. 2105. [NOIP2015] 信息传递

    ★☆   输入文件:2015message.in   输出文件:2015message.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 有n个同学(编号为1到n)正在 ...

  7. js中时钟表盘

    1.js时钟表盘 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. Microsoft SQL Server学习(四)--约束

    SQLServer - 约束 主要是为了保证数据库中的数据一致性.有效性.准确性, 从而提高了数据库中数据的正确性 一.约束的分类 在SQLserver中,约束分三种不同类型 1.实体约束 实提约束是 ...

  9. mongo 3.4分片集群系列之一:浅谈分片集群

    这篇为理论篇,稍后会有实践篇. 这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mong ...

  10. Shell基础笔记一

    由于工作需要,开始学习Shell编程,都是一些简单的基础知识,现整理收集分享出来,希望对大家有帮助 -------------------------------------------------- ...