分析:暴力的方法是非常显然的,从起点走一次,从终点走一次,路径相交的点即为所求,但是这样存图都很难存下,而且如果数据极端可能要求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. 公司4:JrVue主题定制-2

    页面折叠布局:(折叠按钮.transition动画.git项目池模块分支) 布局组件(template): <el-container> <el-aside> <!-- ...

  2. BFS(倒水问题) HDU 1495 非常可乐

    题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...

  3. 状态压缩+枚举 UVA 11464 Even Parity

    题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...

  4. ACM_数数有多少(第二类Stirling数-递推dp)

    数数有多少 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小财最近新开了一家公司,招了n个员工,但是因为资金问题,办公楼只有m间 ...

  5. ACM_18(同余)

    18 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一个简单的问题,大家应该有不少做过大数加法题吧.这个题的数据也是64位整数放 ...

  6. Linux环境下卸载、安装及配置MySQL5.1

    Linux环境下卸载原有MySQL5.1数据库,并重新安装MySQL数据库的示例记录. 一.卸载MySQL 查看主机中是否安装了MySQL数据库: [root@RD-viPORTAL- ~]# rpm ...

  7. Github 文件选择性上传

    用过Github的人都知道.gitignore文件的存在,但是实际用起来还是有一些需要注意的地方,尤其是对于新手来说,稍不注意就会出错.   一.Github选择性忽略特定文件的方式 1.全局设置 一 ...

  8. Objective-C设计模式——中介者Mediator(对象去耦)

    中介者模式 中介者模式很好的诠释了迪米特法则,任意两个不相关的对象之间如果需要关联,那么需要通过第三个类来进行.中介者就是把一组对象进行封装,屏蔽了类之间的交互细节,使不同的类直接不需要持有对方引用也 ...

  9. Android 滚动RecyclerView加载图片时的流畅度优化

    实现:使用onScrollStateChanged回调检测滚动状态,并在RecyclerViewAdapter内部设置类似isScrolling的状态值来控制网络图片的加载. 下面是代码举例: // ...

  10. Ubuntu安装配置Charles,抓取http网络请求包

    http://blog.csdn.net/lylddinghffw/article/details/75322262