51Nod-球与切换器-1293
来源:互联网 发布:模糊pid控制算法 编辑:程序博客网 时间:2024/05/22 12:13
球与切换器
李陶冶 (命题人)
基准时间限制:1 秒 空间限制:131072 KB 分值: 80
有N行M列的正方形盒子。每个盒子有三种状态0, -1, +1。球从盒子上边或左边进入盒子,从下边或右边离开盒子。规则:
如果盒子的模式是-1,则进入它的球从下面出去。(方向变为向下)
如果盒子的模式是+1,则进入它的球从右面出去。 (反向变为向右)
如果盒子的模式是0, 则进入它的球方向不变。从上面进入的,从下面出去,从左面进入的,从右面出去。
球离开一个盒子,这个盒子的模式切换为相反数。已知,每个盒子的状态,扔k个球,它们都从左上角那个盒子的上面进入(方向向下),问最终有几个球从右下角的盒子的下边出去。
(可以理解维球一个一个放,等待的时间足够长,不会有两个球同时进入一个盒子的情形)本题由Javaman翻译。
Input
第1行:包括3个数M, N, K中间用空格分隔,M,N 为盒子的宽度和高度,K为球的数量(1 <= M, N <= 1000, 1 <= K <= 10^18)。第2 - N + 1行:每行M个数(-1, 0 或 1),表示对应的模式。
Output
输出1个数,对应最终有有多少个球从右下角的盒子的下边出去。
Input示例
3 2 4-1 0 -11 0 0
Output示例
1
解题思路:这道题我刚开始想的思路是用搜索做,后来考虑到k太大,非常容易超时,借鉴了大神的想法,用三维数组来做的。res[i][j][0]表示从此位置要向下的球数,res[i][j][1]表示从此位置要向右的球数。
解题代码:
#include<iostream>#include<stdio.h>using namespace std;const int MAXN=1005;int ch[MAXN][MAXN];long long res[MAXN][MAXN][2],K;int read(){ char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c=='-')t=-1; do{s=s*10+c-'0';}while(isdigit(c=getchar())); return s*t;}int main(){ int N,M; scanf("%d%d%lld",&M,&N,&K); long long tmp; for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) ch[i][j]=read(); res[0][1][0]=K; for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) { long long tmp=res[i-1][j][0]+res[i][j-1][1]; if(ch[i][j]==-1) { res[i][j][0]=(tmp+1)/2;//由于每个球走后此处只会变成相反数,所以需要除以2,同下 res[i][j][1]=tmp-(tmp+1)/2; } if(ch[i][j]==1) { res[i][j][1]=(tmp+1)/2; res[i][j][0]=tmp-(tmp+1)/2; } if(ch[i][j]==0) { res[i][j][0]=res[i-1][j][0]; res[i][j][1]=res[i][j-1][1]; } } printf("%lld\n",res[N][M][0]); return 0;}
阅读全文
0 0
- 51nod 1293:球与切换器
- 51Nod-1293-球与切换器
- 51nod 1293 球与切换器
- 51Nod-球与切换器-1293
- 【51nod 球与切换器】+ dp
- [DP] 51Nod 1293 球与切换器
- 1293 球与切换器
- 1293 球与切换器(dp)
- 【51Nod1293】球与切换器
- 51nod 1407 与与与与
- 51Nod-1406-与查询
- 51nod 圆与三角形
- 51nod-1406 与查询
- 51nod 1406 与查询
- 51nod 1406 与查询
- 51nod 1298 圆与三角形
- 51Nod 1298 圆与三角形
- [51nod]1298 圆与三角形
- Unity3D
- Easyui 数据网格详细视图(DataGrid DetailView)
- 机器学习实战:朴素贝叶斯(Naive Bayes)
- AndroidManifest.xml文件解析
- Chapter02 网络(一)
- 51Nod-球与切换器-1293
- poj2352 Stars 线段树单点更新
- 详解C#委托与回调函数
- Java垃圾回收原理
- 用户及组管理
- 二叉树的遍历
- Ascll码表中的数据对应(可用在SQL中)
- OpenResty--改写反向代理页面内容
- ibatis动态多条件查询及模糊查询(oracle,mysql,sql)