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..
*/
posted @ 2020-05-23 08:28  OvO1  阅读(39)  评论(0编辑  收藏  举报