[Lydsy1705月赛]失控的数位板

Time Limit: 30 Sec  Memory Limit: 256 MB
Submit: 148  Solved: 33
[Submit][Status][Discuss]

Description

绘画家小Q正在他的数位板上作画。当他在作画的时候,他的设备突然故障了!此时他的笔变成了擦除模式。在小Q
的脑海中,有一副漂亮的图案,他希望最后能将它呈现在板子上。他按照自己的创作风格,一步一步地绘画。他每
一步只可能是4种指令上(up)下(down)左(left)右(right)中的一种,同时指定一个距离d,每秒往那个方向移动一
步。在创作的一开始,他的笔位于数位板的左下角,且任意时刻他的笔都不会离开数位板。考虑6*8的数位板以及
如下图所示的指令集,如果笔在第17秒末故障了,数位板最终会变成第二幅图的样子。
小Q想知道最早和最晚的时刻t,满足如果数位板在第t秒末故障了,最终显示出来的图案与他预想的一致。注意数
位板可以在第0秒末故障,此时小Q的笔还没有触碰到数位板。

Input

第一行包含三个正整数h,w,n(1<=h,w,n<=10^6,1<=w*h<=10^6),分别表示数位板的高度与宽度以及指令的条数。
接下来h行,每行w个字符
每个字符要么是“#”,要么是“.”。表示小Q预想的效果,其中“#”表示有颜色,“.”表示空白。
接下来n行
每行一个字符串s和一个正整数d(1<=d<=10^6),分别表示方向和距离,输入数据保证操作不会使笔离开数位板。

Output

输出一行两个整数x与y,其中x表示最小的合法的t,y表示最大的合法的t
注意y不能超过最后一条指令执行完毕时的时间。若无解则输出“-1 -1”。

Sample Input

6 8 5
........
........
###.####
#......#
#..#####
#.......
up 3
right 7
down 2
left 4
up 3

Sample Output

17 17

HINT

[Lydsy1705月赛]线段游戏

Time Limit: 3 Sec  Memory Limit: 256 MB
Submit: 322  Solved: 184
[Submit][Status][Discuss]

Description

quailty和tangjz正在玩一个关于线段的游戏。在平面上有n条线段,编号依次为1到n。其中第i条线段的两端点坐
标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列。quailty先手,他可以选择一些互不相交
的线段,将它们拿走,当然他也可以一条线段也不选。然后tangjz必须拿走所有剩下的线段,若有两条线段相交,
那么他就输了,否则他就赢了。注意若quailty拿走了全部线段,那么tangjz也会胜利。quailty深深喜欢着tangjz
,所以他不希望tangjz输掉游戏,请计算他有多少种选择线段的方式,使得tangjz可以赢得游戏。

Input

第一行包含一个正整数n(1<=n<=100000),表示线段的个数。
第二行包含n个正整数p_1,p_2,...,p_n(1<=p_i<=n),含义如题面所述。

Output

输出一行一个整数,即tangjz胜利的方案数,因为答案很大,请对998244353取模输出。

Sample Input

5
1 2 4 5 3

Sample Output

8

HINT

 

Source

题解:对于数控板,对于一个数如果有颜色那么时间一定在其后,

   如果本应该有颜色但是现在没颜色了,那么时间一定在其之前。

   对于线段的话

   题意可理解为给定一个序列,求将这个序列分成两个上升序列的方案数

   先判断是否输出0,方法是用树状数组求最长下降序列,若长度>2,说明无解

   然后从左往右扫,将这些数一个一个加到set里,在加入之前,先将set中比当前数大的数全都删掉,

   然后将这些数中最大的数加到set中去,最后若set中还剩m个数,答案就是2^m

   为什么这样理解,对于小的数当然是随便选,想后面的,加入一个数,如果比当前最大的数大,那么直接加入

   否则,必然和前面构成矛盾,将这些数删除,留下最大是因为之后如果不影响的话,必须必当前最大值更大才行。

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=1e6+;
int h,w,n,op[M],d[M],nex[][]={-,,,,,,,-},curx,cury;
ll t,L,R;
set<int> sx[M],sy[M];
char s[M];
int getop(char *s){
if(s[]=='u') return ;
if(s[]=='r') return ;
if(s[]=='d') return ;
if(s[]=='l') return ;
}
char ask(int x,int y,bool flag){
if(flag) swap(x,y);
return s[x*w+y];
}
void solve(set<int> &s,int st,int ed,ll tl,int wh,bool flag){
int l=st,r=ed;
if(l>r) swap(l,r);
for(set<int>::iterator it=s.lower_bound(l);it!=s.end()&&*it<=r;){
if(flag) sx[*it].erase(sx[*it].find(wh));
else sy[*it].erase(sy[*it].find(wh));
if(ask(wh,*it,flag)=='#') L=max(L,tl-abs(*it-st));
else R=min(R,tl-abs(*it-st)-);
s.erase(it++);
}
}
int main(){
scanf("%d%d%d",&h,&w,&n);
for(int i=;i<h;i++)
scanf("%s",s+i*w);
for(int i=;i<=n;i++){
char tmp[];
scanf("%s%d",tmp,&d[i]);
op[i]=getop(tmp);
}
for(int i=;i<h;i++)
for(int j=;j<w;j++) sx[i].insert(j);
for(int i=;i<w;i++)
for(int j=;j<h;j++) sy[i].insert(j);
curx=h-;
cury=;
t=;
for(int i=;i<=n;i++){
t+=d[i];
curx+=nex[op[i]][]*d[i];
cury+=nex[op[i]][]*d[i];
}
R=t;
for(int i=n;i;i--){
int tp=(op[i]+)%;
int nx=curx+nex[tp][]*d[i],ny=cury+nex[tp][]*d[i];
if(tp%) solve(sx[curx],cury,ny,t,curx,);
else solve(sy[cury],curx,nx,t,cury,);
t-=d[i];
curx=nx;
cury=ny;
}
for(int i=;i<h&&L<=R;i++){
for(set<int>::iterator it=sx[i].begin();it!=sx[i].end();it++){
if(ask(i,*it,)=='#'){
L=R+;
break;
}
}
}
if(L>R) L=R=-;
printf("%lld %lld\n",L,R);
}
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
using namespace std;
int n,ans,v[],tr[];
set<int> s;
void updata(int x,int val)
{
for(int i=x;i<=n;i+=i&-i) tr[i]=max(val,tr[i]);
}
int query(int x)
{
int i=x,ret=;
for(i=x;i;i-=i&-i) ret=max(ret,tr[i]);
return ret;
}
int main()
{
scanf("%d",&n);
int i,a,b;
set<int>::iterator it;
for(i=;i<=n;i++) scanf("%d",&v[i]);
for(i=n;i>=;i--)
{
a=query(v[i]-)+;
if(a>=)
{
printf("");
return ; }
updata(v[i],a);
}
for(i=;i<=n;i++)
{
b=v[i];
while(!s.empty())
{
it=s.upper_bound(b);
if(it==s.end()) break;
b=*it,s.erase(b);
}
s.insert(b);
}
b=s.size(),ans=;
while(b--) ans=(ans*)%;
printf("%d",ans);
return ;
}

bzoj 4879 失控的数位板 4881 线段游戏 贪心,瞎搞的更多相关文章

  1. bzoj 1610: [Usaco2008 Feb]Line连线游戏【瞎搞】

    阴沟翻船.jpg 居然忘了除0的情况 枚举两两之间的线,把斜率装起来排个序去个重就好了 真是水的一晚上呢 #include<iostream> #include<cstdio> ...

  2. bzoj 2563: 阿狸和桃子的游戏 贪心

    这个真的好巧妙啊~ 如果只考虑点权的话显然直接按照权值大小排序即可. 但是加入了边权,就有了一个决策的问题. 于是,我们将边权分一半,分给两个端点. 如果一个人拿了两个端点,则边权都会加上. 否则,边 ...

  3. bzoj 3720 Gty的妹子树 树分块?瞎搞

    Gty的妹子树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2149  Solved: 781[Submit][Status][Discuss] D ...

  4. bzoj 3573: [Hnoi2014]米特运输【树形dp+瞎搞】

    阅读理解题,题意是以1为根的有根树,每个点有点权,求修改最少点权能使每个点的权值等于其所有子节点权值之和并且每个点的所有子节点权值相等的个数 然后就比较简单了,就是有个技巧是数太大,需要对所有操作都取 ...

  5. bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】

    首先考虑快排的递归什么时候停下,显然是当前段只剩下一个数了,也就是一个数两边出现分隔符 然后再考虑计算冒泡长度这个操作,因为有分割,所以我们可以把这些放到一起冒泡,这和递归每个区间冒泡是等价的 所以答 ...

  6. BZOJ 4881: [Lydsy2017年5月月赛]线段游戏

    4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 164  Solved: 81[Submit][St ...

  7. BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)

    4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 359  Solved: 205[Submit][Stat ...

  8. #6034. 「雅礼集训 2017 Day2」线段游戏 李超树

    #6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统 ...

  9. 【loj6034】「雅礼集训 2017 Day2」线段游戏

    #6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:Special Judge 上传者: 匿名 题目描述 ...

随机推荐

  1. (数据科学学习手札23)决策树分类原理详解&Python与R实现

    作为机器学习中可解释性非常好的一种算法,决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方 ...

  2. MVC中输入的保护验证用:HttpServerUtility.HtmlEncode

    安全说明: 上面的代码使用HttpServerUtility.HtmlEncode来保护应用程序的恶意输入 (即 JavaScript).详细信息请参阅如何: 在 Web 应用程序,通过应用 HTML ...

  3. java容器操作一

    List l = new ArrayList(); l.add(1); l.add("ne"); // 获取 System.out.println(l.get(0)); // 判断 ...

  4. CentOS修改网卡名称

    转 一.问题说明 测试环境中出现的小问题,因为虚拟机之间经常复制来复制去,导致网卡配置这块的不一致现象. 配置文件的信息: [root@ora10g network-scripts]# catifcf ...

  5. 一次和别人争吵一个按钮,点击后显示导航;再点击不显示的效果,是否一定以及必须用js?

    事情经过是这样的,我们组一个说话很喜欢用一定,肯定的哥们,吃午饭的时候拿了自己做的一个UI库,头部有一个按钮 点击展开,再次点击收缩,他意思说一个按钮无法记录点击状态,必须使用js.然后我看了一眼,心 ...

  6. iOS笔记054 - 核心动画

    注意事项 :locationInView和translationInView // 返回相对于控件自身内部触摸点的位置 [pan locationInView:self]; // 返回两个触摸点之间的 ...

  7. HDFS伪分布式

    (一).HDFS shell操作 以上已经介绍了如何搭建伪分布式的Hadoop,既然环境已经搭建起来了,那要怎么去操作呢?这就是本节将要介绍的内容: HDFS自带有一些shell命令,通过这些命令我们 ...

  8. octomap建立

    1.安装ros的octomap  ---已完成 2.阅读相关论文,了解其机理,并编写程序实现. 参考网页:https://www.cnblogs.com/gaoxiang12/p/5041142.ht ...

  9. 【集训试题】exam 信心考 最小割

    题意概述: 有N个人,A,B两个考场.如果学生i在A考场,总信心值增加xi:如果学生i在B考场,总信心值增加yi.其中还有m对好友,当第i对好友的两个人都在A考场时,总信心值增加ai:如果两人都在B考 ...

  10. 复合类型的声明——是int *p还是int* p

    我们先来看一条基本类型的声明语句:int a, b, ... 即一条声明语句由一个数据类型(int)和紧随其后的一个变量名列表(a, b, ...)组成 更通用的描述是:一个基本数据类型和紧随其后的一 ...