tags:

  • 模拟
  • 贪心
  • 搜索
  • 动态规划

    categories:
  • 信息学竞赛
  • 总结

积木大赛

花匠

华容道

积木大赛

Solution

  发现如果一段先单调上升然后在单调下降, 那么这一块的代价是最高的减去前面已经铺好的, 例如

6 5 6 7 8 9 8 7 6 5

需要先先铺6 5代价是6, 然后铺67898765, 代价是9-5.

  根据这个这个就是记录一个已经铺好的最大值, 然后如果比已经铺好的大就加入答案并且更新已经铺好的.

Code

#include<cstdio>
int main(){
int n,h,l,a;
scanf("%d",&n);
for(int i=0,l=a=0;i<n;++i){
scanf("%d",&h);
if(h>l)a+=h-l;
l=h;
}
printf("%d",a);
return 0;
}

花匠

Solution

  发现实际上是求最长波动子序列, 然后实际上可以用dp做, 但是不如找一下其他的性质, 会发现数列可以表示成下面的形式.

\[\nearrow \searrow \nearrow \searrow \nearrow \searrow \nearrow \searrow \cdots
\]

然后只需要取连续下降子序列中的最大值和连续上升子序列中的最小值.写的非常草率.

Code

#include<cstdio>
#include<stack>
std::stack<int>que; int main(){
int n,h,l;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%d",&h);
if(que.size()&&h==que.top())continue;
if(que.empty())que.push(h);
else if(que.size()==1){
if(h==que.top())continue;
l=h>que.top();que.push(h);
}
else if(l){
if(h>que.top())
que.pop(), que.push(h);
else
que.push(h),l^=1;
}
else {
if(h<que.top())
que.pop(),que.push(h);
else
que.push(h),l^=1;
}
}
printf("%d\n",que.size());
return 0;
}

华容道

Solution

  • bfs, 用空格的位置和目标棋子的位置当状态, 可以得到70分.
  • bfs出空白格子到每个格子各个方向的路程, 求出最短路.

Code

70分做法

#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#define N 35 #include<iostream>
using namespace std; struct Graph{
int sx,ox,sy,oy;
Graph(){};
Graph(int s){scanf("%d%d%d%d",&ox,&oy,&sx,&sy);}
Graph(int a,int b,int c,int d){
sx=a,sy=b,ox=c,oy=d;
}
void print(){
printf("Graph: %d %d %d %d\n",sx,sy,ox,oy);
}
}; int dx[9]={0,0,1,-1};
int dy[9]={1,-1,0,0};
int vis[N][N][N][N];
int ti[N][N][N][N];
int n,m,q,ans;
int G[N][N];
Graph start;
int tx,ty;
int tot; bool check(int x,int y){
if(!G[x][y])return false;
if(x<1||x>n||y<1||y>m)return false;return true;
} int main(){
int x,y,xx,yy;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%d",&G[i][j]);
while(q--){
memset(vis,false,sizeof(vis));
start=Graph(true);
scanf("%d%d",&tx,&ty);
if(start.sx==tx&&start.sy==ty){
printf("0\n");
continue;
}
ti[start.sx][start.sy][start.ox][start.oy]=0;
std::queue<Graph>que;
que.push(start);bool flag=false;
while(!que.empty()){
Graph now=que.front(),nxt;que.pop();
for(int i=0;i<4;++i){
nxt=now,xx=now.ox+dx[i],yy=now.oy+dy[i];
if(!check(xx,yy))continue;
x=now.sx,y=now.sy;
if(xx==x&&yy==y)x=now.ox,y=now.oy;
if(vis[x][y][xx][yy])continue;
nxt=(Graph){x,y,xx,yy};
// nxt.print();
ti[x][y][xx][yy]=ti[now.sx][now.sy][now.ox][now.oy]+1;
if(x==tx&&y==ty){
flag=true,ans=ti[x][y][xx][yy];
break;
}
vis[x][y][xx][yy]=true;
que.push(nxt);
}
if(flag)break;
}
if(flag)printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}

NOIP 2013 day2的更多相关文章

  1. 【NOIP 2013 DAY2 T3】 华容道(spfa)

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  2. NOIP 2013 货车运输【Kruskal + 树链剖分 + 线段树 】【倍增】

    NOIP 2013 货车运输[树链剖分] 树链剖分 题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在 ...

  3. Luogu 1979 NOIP 2013 华容道(搜索,最短路径)

    Luogu 1979 NOIP 2013 华容道(搜索,最短路径) Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面 ...

  4. [Noip 2013 Day1-3] 货车运输 做法总结

    [Noip 2013 Day1-3] 货车运输 做法总结 Online Judge:Luogu-1967 Label:启发式合并,离线,整体二分,按秩合并,倍增,最大生成树 打模拟离线赛时做到,顺便总 ...

  5. NOIP 2013 提高组 day2 积木大赛

      积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第

  6. noip 2013 提高组 Day2 部分题解

    积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) #include<iostream> #incl ...

  7. 【CodeVS 3290】【NOIP 2013】华容道

    http://codevs.cn/problem/3290/ 据说2013年的noip非常难,但Purpleslz学长还是AK了.能A掉这道题真心orz. 设状态$(i,j,k)$表示目标棋子在$(i ...

  8. NOIP 2012 Day2

    tags: 扩展欧几里得 二分答案 查分 倍增 二分答案 贪心 NOIP categories: 信息学竞赛 总结 同余方程 借教室 疫情控制 同余方程 Solution 首先同余式可以转化为等式. ...

  9. NOIP 2011 Day2

    tags: 贪心 模拟 NOIP categories: 信息学竞赛 总结 计算系数 Solution 根据二项式定理, \[ \begin{align} (a+b)^n=\sum_{k=0}^nC_ ...

随机推荐

  1. Unity游戏开发技术的最佳实践

    活动详情   作为全球规模最大的Unity开发者聚会,历年的Unite大会都成为开发者们获取Unity最新技术知识,交流开发经验,把握行业发展脉搏,体验全球前沿科技与高品质Made with Unit ...

  2. POJ1066:Treasure Hunt——题解

    http://poj.org/problem?id=1066 题目大意:给一个由墙围成的正方形,里面有若干墙,每次破墙只能从(当前看到的)墙的中点破,求最少破多少墙才能看到宝藏. —————————— ...

  3. POJ3686:The Windy's——题解

    http://poj.org/problem?id=3686 题目大意: 有n个订单m个厂子,第i个订单在第j个厂子所需时间为zij,一个厂子做一个订单时不能做其他的订单. 求订单平均时间最小值. — ...

  4. BZOJ4567:[SCOI2016]背单词——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4567 Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?” ...

  5. BZOJ1086:[SCOI2005]王室联邦——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1086 题面源于洛谷. 题目描述 “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每 ...

  6. 关于equals与hashcode的重写

    我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...

  7. bzoj 1111 [POI2007]四进制的天平Wag 数位Dp

    1111: [POI2007]四进制的天平Wag Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 302  Solved: 201[Submit][St ...

  8. Bigbluebutton安装过程

    BigBlueButton安装过程(翻译) 欢迎来到BigBlueButton 1.0-beta安装指南(以下简称BigBlueButton 1.0).BigBlueButton是一个开放源代码的网络 ...

  9. java File (文档流)

    一.   数据流的基本概念 1.数据流 在Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式.传输中的数据就像流水一样,也称为数据 ...

  10. 使用JMeter录制脚本并调试

    仍然以禅道中添加bug为例进行录制 第一步:在JMeter中添加线程组,命名为AddBugByJMeter 第二步:在线程组下添加HTTP请求默认值 添加->配置元件->HTTP请求默认值 ...