noip模拟赛 柜(暴力)


分析:暴力的方法是非常显然的,从起点走一次,从终点走一次,路径相交的点即为所求,但是这样存图都很难存下,而且如果数据极端可能要求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模拟赛 柜(暴力)的更多相关文章
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- 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题, ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- NOIP模拟赛-2018.11.5
NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...
随机推荐
- 清北考前刷题day6早安
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...
- noip2016 小结(ac两题+学习总结)
NOIP2016考试小结 DAY 1 T1 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内, ...
- 【第三届强网杯】write up
一,鲲or鳗orGame 从浏览器里拿到game.gb 用 VisualBoyAdvance ,搜索内存变量,然后改变量就完事了,但是改变量他们说直接利用添加代码功能有bug,所以要在工具里的内存查看 ...
- 题解报告:poj 2386 Lake Counting(dfs求最大连通块的个数)
Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...
- 使用wkwebview后,页面返回不刷新的问题
onpageshow 事件在用户浏览网页时触发. onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 ...
- 303 Range Sum Query - Immutable 区域和检索 - 不可变
给定一个数组,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点.例如:给定nums = [-2, 0, 3, -5, 2, -1],求和函数为sumRange() ...
- CF821B Okabe and Banana Trees
思路: 暴力枚举. 实现: #include <iostream> #include <cstdio> using namespace std; typedef long lo ...
- Spartan6系列之器件详细介绍、选型参考
1. 概述 Spartan6系列是一类低成本高容量的FPGA,采用45nm低功耗敷铜技术,能在功耗.性能.成本之间很好地平衡:Spartan6系列内部采用双寄存器.6输入的LUT,还有一系列 ...
- Linux系统命令及文件的浏览、管理和维护
在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件的路径,那么系统 ...
- (转)Hibernate框架基础——Java对象持久化概述
http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构 说明 ...