问题 F: 求生大作战
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
PinkRabbit 又趁 Czhou 不注意划水了,今天他打开了求生大作战,一共划了3次,每次划水时间分别为 t1,t2,t3,如果 PinkRabbit 的划水时间大于给定的时间 T,他就会被 Czhou 发现并跑 3000m。
PinkRabbit 想知道,他要不要跑步。如果要,请输出Go running!,否则输出Keep rowing!。
输入
输入有 1 行,包含四个非负整数 t1,t2,t3,T(1≤t1,t2,t3,T≤1018),分别表示 PinkRabbit 三次划水时间和限制时间。相邻两个数之间用一个空格隔开。
输出
输出只有 1 行,包含一个字符串,Go running!或Keep rowing!。
样例输入 Copy
60 60 60 19260817
样例输出 Copy
Keep rowing!
模拟,要开long long
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<queue> #include<stack> #include<map> using namespace std; const long long inf =0x3f3f3f3f; const int maxn=1e6+5; const long long mod =19260817; #define PI 3.14159265358979323846 #define ll long long #define ull unflaged ll inline int read() { int x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s<='9'&&s>='0'){x=x*10+s-'0';s=getchar();} return x*f; } int main() { ll t1,t2,t3,t; cin>>t1>>t2>>t3>>t; ll ans=t1+t2+t3; if(ans>t) { cout<<"Go running!"<<endl; } else cout<<"Keep rowing!"<<endl; }
问题 G: Q版泡泡堂
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
Q 版泡泡堂是一种多人对战游戏,最多可以有四人参与游戏,每个人可以通过使用炸弹或其他道具来破坏砖块并消灭别人,最后剩下的那个人将会夺取胜利。
Dodo 现在开始研究 Q 版泡泡堂的 AI ,现在他需要 AI 的一个部分,就是在给定的一个局面,求出将会有多少个人被炸弹消灭。
地图是这样描述的:对于一个空地,用“.”表示;对于一个人,用P表示;对于一个炸弹,用B表示;对于墙,用#表示。
对于一枚炸弹,它会影响半径为 p 的一个十字形内的人,但如果有一个方向有墙,那么这个炸弹不会影响到这个方向上墙以外的人。
因为 dodo 忙着划水,所以他把这个问题交给了善于做题的你。
输入
输入的第一行,包含三个正整数 n,m,p(1≤n,m≤500,1≤p≤10),每两个数间以一个空格分开,分别代表地图的行数和列数和炸弹的爆炸半径。
接下来的 n 行,每行 m 个字符,表示地图。
输出
输出一个整数,为会被炸弹消灭的人数。
样例输入 Copy
5 5 2
.B#P.
.P#…
.#…
.P…B
…B…
样例输出 Copy
1
模拟,可以从炸弹找人,也可以从人找炸弹。
要注意遇到墙就不走了。
my:从炸弹找人
#include<bits/stdc++.h> using namespace std; typedef unsigned long long ull; const int maxn=510; char mp[maxn][maxn]; int vis[maxn][maxn]; int n,m,k; int res=0; int nx[4]={0,0,1,-1}; int ny[4]={1,-1,0,0}; void dfs(int x,int y){ for(int i=x+1;i<=min(x+k,n);i++){ if(mp[i][y]=='#') break; else if(mp[i][y]=='P'&&!vis[i][y]) vis[i][y]=1,res++; } for(int i=x-1;i>=max(0,x-k);i--){ if(mp[i][y]=='#') break; else if(mp[i][y]=='P'&&!vis[i][y]) vis[i][y]=1,res++; } for(int i=y-1;i>=max(0,y-k);i--){ if(mp[x][i]=='#') break; else if(mp[x][i]=='P'&&!vis[x][i]) vis[x][i]=1,res++; } for(int i=y+1;i<=min(y+k,n);i++){ if(mp[x][i]=='#') break; else if(mp[x][i]=='P'&&!vis[x][i]) vis[x][i]=1,res++; } } void AC(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) cin>>mp[i]+1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(mp[i][j]=='B') dfs(i,j); printf("%d\n",res); } int main(){ AC(); return 0; }
队友的:从人找炸弹
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<queue> #include<stack> #include<map> using namespace std; const long long inf =0x3f3f3f3f; const int maxn=1e6+5; const long long mod =19260817; #define PI 3.14159265358979323846 #define ll long long #define ull unflaged ll inline int read() { int x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s<='9'&&s>='0'){x=x*10+s-'0';s=getchar();} return x*f; } char a[505][505]; int main() { int n,m,p; cin>>n>>m>>p; for(int i=1;i<=n;i++) { cin>>a[i]+1; } ll ans=0; int flag1,flag2,flag3; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { flag3=0; if(a[i][j]=='P') { for(int k=j-1;k>=j-p&&k>=1;k--) { if(a[i][k]=='#') { break; } else if(a[i][k]=='B')//有炸弹没 { //ans++; flag3=1; break; } } for(int k=j+1;k<=j+p&&k<=m;k++) { if(a[i][k]=='#') { break; } else if(a[i][k]=='B')//有炸弹没 { //ans++; flag3=1; break; } } for(int k=i-1;k>=1&&k>=i-p;k--) { if(a[k][j]=='#') { break; } else if(a[k][j]=='B')//有炸弹没 { //ans++; flag3=1; break; } } for(int k=i+1;k<=n&&k<=i+p;k++) { if(a[k][j]=='#') { break; } else if(a[k][j]=='B')//有炸弹没 { //ans++; flag3=1; break; } } } if(flag3) ans++; } } cout<<ans<<endl; } /* 5 5 2 .B#P. .P#.. .#... .P..B ..B.. */