UPC——2020年春混合个人训练第二十五场(FG)
太菜了只能写写签到
问题 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..
*/