原文链接https://www.cnblogs.com/zhouzhendong/p/9272797.html

题目传送门 - CF555C

题意

  给定一个 $n\times n(n\leq 10^9)$ 的方格阵列。

  接下来,我们将从该方阵的副对角线开始进行一些操作。

  操作 $"y\ x\ U"或"y\ x\ L"$ 分别表示一个人从第 $x$ 行第 $y$ 列开始走,$U$ 表示向上,$L$ 表示向左。保证初始位置在副对角线上面。

  已经有人走过的不能再走,每次操作走到不能走为止。对于每次操作,输出能走几格。

  下面是样例:

input
6 5
3 4 U
6 1 L
2 5 L
1 6 U
4 3 U
output
4
3
2
1
2
input
10 6
2 9 U
10 1 U
1 10 U
8 3 L
10 1 L
6 5 U
output
9
1
10
6
0
2
Note

Pictures to the sample tests:

题解

  由于向上和向左走是差不多的,所以我们这里只讲向上时的做法。

  首先我们考虑特殊情况:

  如果当前起始各自已经走过人了,那么输出 $0$ 。这个用 map 可以搞定。

  对于向上的,我们在这个格子的左边分别找到离他最近的向上的和向左的行走记录。

  考虑分两种情况讨论:

  

  

  其中红色为当前位置,绿色为当前位置右侧第一个向上的记录。橙色为当前位置右侧的第一个向左记录。

  蓝色为拦住绿色线段的线段。

  这个只需要 set + lower_bound 就可以了。

  代码还是比较短的。

代码

#include <bits/stdc++.h>
#define y1 __y1
using namespace std;
const int N=200005;
int n,q;
set <int> U,L;
map <int,int> u,l;
int main(){
scanf("%d%d",&n,&q);
U.clear(),L.clear(),u.clear(),l.clear();
U.insert(0),L.insert(0);
U.insert(n+1),L.insert(n+1);
u[0]=l[0]=n+1,u[n+1]=l[n+1]=0;
for (int i=1;i<=q;i++){
int x,y;
char ch[2];
scanf("%d%d%s",&y,&x,ch);
if (ch[0]=='L'){
if (u[y]||l[x]){
puts("0");
continue;
}
int x1=*L.upper_bound(x),y1=n+1-x1;
int y2=*--U.upper_bound(y),x2=n+1-y2;
if (y1<y2)
l[x]=x2-x;
else
l[x]=l[x1]+x1-x;
printf("%d\n",l[x]);
L.insert(x);
}
else {
if (l[x]||u[y]){
puts("0");
continue;
}
int x1=*--L.upper_bound(x),y1=n+1-x1;
int y2=*U.upper_bound(y),x2=n+1-y2;
if (x1>x2)
u[y]=y1-y;
else
u[y]=u[y2]+y2-y;
printf("%d\n",u[y]);
U.insert(y);
}
}
return 0;
}

  

Codeforces 555C Case of Chocolate 其他的更多相关文章

  1. codeforces 555c// Case of Chocolate// Codeforces Round #310(Div. 1)

    题意:直角边为n的网格巧克力,一格为一块,选择斜边上一点,从左或上吃,直到吃到空气,称为一次操作.给出几个操作,问各能吃几块.如果x是当前要吃的横坐标,在已经吃过的中找x1>=x的第一个x1,即 ...

  2. Codeforces Round #310 (Div. 1) C. Case of Chocolate set

    C. Case of Chocolate Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/555/ ...

  3. Codeforces 555 C. Case of Chocolate

    \(>Codeforces \space 555 C. Case of Chocolate<\) 题目大意 : 有一块 \(n \times n\) 的倒三角的巧克力,有一个人要吃 \(q ...

  4. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  5. Codeforces Round #310 (Div. 1) C. Case of Chocolate (线段树)

    题目地址:传送门 这题尽管是DIV1的C. . 可是挺简单的. .仅仅要用线段树分别维护一下横着和竖着的值就能够了,先离散化再维护. 每次查找最大的最小值<=tmp的点,能够直接在线段树里搜,也 ...

  6. Codeforces 689C. Mike and Chocolate Thieves 二分

    C. Mike and Chocolate Thieves time limit per test:2 seconds memory limit per test:256 megabytes inpu ...

  7. CodeForces 689C Mike and Chocolate Thieves (二分+数论)

    Mike and Chocolate Thieves 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/G Description ...

  8. Educational Codeforces Round 1 E. Chocolate Bar 记忆化搜索

    E. Chocolate Bar Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/598/prob ...

  9. Educational Codeforces Round 1 E. Chocolate Bar dp

    题目链接:http://codeforces.com/contest/598/problem/E E. Chocolate Bar time limit per test 2 seconds memo ...

随机推荐

  1. Linux与Windows串口通信

    串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和 ...

  2. SQL Server 之 子查询与嵌套查询

    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用 ...

  3. Jmeter之模拟文件上传、下载接口操作

    上周群里有位同学,问我用jmeter怎么上传文件?因好久没用jmeter了,顺便自己也复习下,现整理出来和大家分享 一.准备工作: 上传接口一个(自行开发解决了) 下载接口 ps:没有困难创造困难也要 ...

  4. [C]关于extern与struct

    问题 我曾经很困惑,就是在两个编译单元当中,如何把一个单元中声明的struct结构引入到另外一个单元中来,折腾了很久,后来发现这位大神的留言 不是这么用的…… 类型的定义和类型变量的定义不同,类型定义 ...

  5. [HTTP]Etag的工作流程

    1. 浏览器首次访问该资源时,web服务器返回资源的同时,响应报文头携带ETag标签: 2. 浏览器将保存该Etag标签的值: 3. 当浏览器发起下一次请求,请求报文头将会携带 If-None-Mat ...

  6. python-并发编程之多进程

    一.操作系统基础: 进程的概念起源于操作系统,操作系统其它所有概念都是围绕进程来的,所以我们了解进程之前先来了解一下操作系统 操作系统位于计算机硬件与应用软件之间,本质也是一个软件.操作系统由操作系统 ...

  7. Linux文件系统深度讨论【转】

      本文旨在对Linux文件系统概念高级工作方式进行的讨论,不是对特定文件系统类型(如EXT4)如何工作的低级描述,也不是对文件系统命令的教程. 每台通用计算机都需要将各种类型的数据存储在硬盘驱动器( ...

  8. 如何取出DataTable中某几个字段(列名)组合新表

    在偶不知道第二种方法之前.偶费了好大劲才把这个问题解决.下面把这两个方法都帖出来,请大家批评指正.或有更好的办法也帖出来,一起交流 第一种方法:            string sql = &qu ...

  9. 微信小程序商业级实战

    1.微信开放能力:微信支付.微信登录.二维码生成.分享

  10. C#将DLL嵌入到exe当中

    1.选中项目文件,找到Resources.resx,双击Resources.resx,然后添加文件(选择需要的dll文件),点击确定,项目下会自动生成一个Resources文件夹,里面包含添加dll. ...