Codeforces Round #325 (Div. 2) Phillip and Trains dp
2015-10-13 00:24
447 查看
原题连接:http://codeforces.com/contest/586/problem/D
题意:
就大家都玩过地铁奔跑这个游戏(我没玩过),然后给你个当前的地铁的状况,让你判断人是否能够出去。题解:
就首先预处理一下每个点在哪些时刻会被车子占领,然后从右向左dp一下就好代码:
#include<iostream> #include<cstring> #include<string> #include<vector> #include<algorithm> #include<cmath> #define MAX_N 123 using namespace std; int n,k; string ma[3]; bool d[3][MAX_N][MAX_N]; int T; bool dp[3][MAX_N]; void print(){ for(int i=0;i<3;i++,cout<<endl) for(int j=0;j<n;j++)cout<<dp[i][j]<<" "; cout<<"----"<<endl; } int main(){ cin.sync_with_stdio(false); cin>>T; while(T--){ cin>>n>>k; memset(dp,0,sizeof(dp)); memset(d,0,sizeof(d)); for(int i=0;i<3;i++)cin>>ma[i]; for(int i=0;i<3;i++) for(int j=0;j<n;j++) if(ma[i][j]<='Z'&&ma[i][j]>='A') for(int k=j,t=0;k>=0;k-=2,t++) d[i][k][t]=1; for(int i=0;i<3;i++) dp[i][0]=('s'==ma[i][0]); for(int j=0;j<n-1;j++){ for(int i=0;i<3;i++){ if(dp[i][j]){ if(d[i][j+1][j])continue; for(int k=0;k<3;k++) if(d[k][j+1][j]==0&&d[k][j+1][j+1]==0&&abs(k-i)<=1) dp[k][j+1]=1; } } //print(); } bool ans=0; for(int i=0;i<3;i++)ans|=dp[i][n-1]; if(ans)cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
相关文章推荐
- LA 4064 Magnetic Train Tracks
- Maven 'failed to read artifact descriptor'
- LeetCode 11 Container With Most Water(最大水容器)
- 【高斯消元】poj 1681 Painter's Problem
- 【noip停课集训,10.12】【#2training】
- WebStorm 通过git取远端项目 cannot run program "git.exe" and Failed
- WebStorm 通过git取远端项目 cannot run program "git.exe" and Failed
- DataInputStream和DataOutputStream
- RAID4 慢的原因
- [LeetCode]Climbing Stairs
- 'WinMain' : function cannot be overloaded
- 小议:Metadata Service is not available的解决方案
- 将普通工程转为mvn标准工程(main resources)
- 文件/目录操作(3)——cat、tac、more、head、tail、od命令
- gradle project sync failed. basic functionality (e.g.editing, debugging )will not work properly
- 【bzoj 1786】[Ahoi2008]Pair 配对
- Maven实战 第2章 Maven的安装和配置gai
- hdu 1151 Air Raid(最小路径覆盖)
- hdu 5319 Painter(杭电多校赛第三场)
- poj 1363 Rails