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断句. 好诡异的题目,首先给出 ...
随机推荐
- 网络连接详细信息出现两个自动配置ipv4地址的解决办法
问题描述:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法: 先将本地连接ip设置成自动获取 点击开始——>运行——>输入cmd,回车,进入命令行界 ...
- 洛谷 P1037 产生数
题目描述 给出一个整数n(n<10^30)和k个变换规则(k≤15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规则(k=2): 2->53-> ...
- less新手入门(三) 作为函数使用的Mixin、@import 导入指令 、@import 导入选项
五.作为函数使用的Mixin 从mixin返回变量 在mixin中定义的所有变量都是可见的,并且可以在调用者的作用范围中使用(除非调用者用相同的名称定义它自己的变量). .mixin(){ @widt ...
- mysql5.7 1055
错误提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggreg ...
- PowerDesigner 的使用教程
PowerDesigner 的使用这两篇博客挺好,我也是跟着学习,就不再写了: 初步学习: http://www.cnblogs.com/huangcong/archive/2010/06/14/17 ...
- 二分搜索 HDOJ 2675 Equation Again
题目传送门 /* 二分搜索:式子两边取对数,将x提出来,那么另一边就是一个常数了,函数是:lnx/x.二分搜索x,注意要两次 */ #include <cstdio> #include & ...
- 转 PHP - AJAX 与 PHP
1. AJAX 被用于创建交互性更强的应用程序. AJAX PHP 实例 下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 服务器进行通信: 实例 尝试在输入框中输入一个名字,如:Ann ...
- [转]oracle 同义词 synonym
本文转自:http://blog.csdn.net/generalfu/article/details/7906561 同义词定义 当一个用户想访问另外一个用户的表时, 需要在表前加用户名,总加表名不 ...
- Java 8 (9) Optional取代null
NullPointerException,大家应该都见过.这是Tony Hoare在设计ALGOL W语言时提出的null引用的想法,他的设计初衷是想通过编译器的自动检测机制,确保所有使用引用的地方都 ...
- [ Luogu 4917 ] 天守阁的地板
\(\\\) \(Description\) 定义二元函数\(F(x,y)\)表示,用 \(x\times y\) 的矩形不可旋转的铺成一个任意边长的正方形,所需要的最少的矩形个数. 现在\(T\)组 ...