AtCoder Beginner Contest 096题解

本文解析了AtCoder竞赛中的四道题目,包括简单的数值比较、计算最大值的组合、字符矩阵的连通性验证以及质数筛选策略。每道题都提供了详细的思路分析及AC代码示例。

                AtCoder Beginner Contest 096

A题题解:判断a和b的大小即可

AC代码:

#include <iostream>
using namespace std;
const int maxn = 55;
#define _for(i,a,b) for(int i=a;i<=b;i++)
int n,m,a[maxn];
int main(int argc, char const *argv[])
{
    cin>>n>>m;
    if(n<=m)cout<<n<<endl;
    else cout<<n-1<<endl;
    return 0;
}

B题题解:最大结果就是三者的最大值一直乘下去然后求和

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[])
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int ans = max(a,b);
    ans = max(ans,c);
    int sum = ans;
    while(d>0)
    {
        ans*=2;
        d--;
    }
    sum = a+b+c+ans-sum;
    cout<<sum<<endl;
    return 0;
}

C题题解:no的情况只有单个#的时候,所以直接判断是否存在单#即可

AC代码:

#include <iostream>
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 55;
char s[maxn][maxn];
int n,m,ans;
int xx[]={1,-1,0,0},yy[]={0,0,1,-1};
bool check(int x,int y)
{
    _for(i,0,3)
    {
        int nowx = x+xx[i];
        int nowy = y+yy[i];
        if(nowx>n||nowx<1||nowy>m||nowy<1)continue;
        if(s[nowx][nowy]=='#')return false;
    }
    return true;
}
int main(int argc, char const *argv[])
{
    cin>>n>>m;
    _for(i,1,n)
    {
        _for(j,1,m)cin>>s[i][j];
    }
    _for(i,1,n)
    {
        _for(j,1,m)if(s[i][j]=='#')if(check(i,j))ans = 1;
    }
    if(ans)cout<<"No"<<endl;
    else cout<<"Yes"<<endl;
    return 0;
}

D题题解:找N个数,其中任意五个数和为合数,那么先质数筛筛出小于55555的质数,然后找n个质数,每个质数都满足%5==1,那么最后和就是合数。

AC代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 55699;
int n,sum,prime[maxn],isprime[maxn],ans[maxn];
void ge()
{
    _for(i,2,maxn)
    {
        if(prime[i]==0)
        {
            isprime[++sum]=i;
            for(int j=i*2;j<=maxn;j+=i)prime[j]=1;
        }
    }
}
int main(int argc, char const *argv[])
{
    cin>>n;
    ge();
    int k = 0;
    _for(i,1,sum)
    {
        if(isprime[i]%5==1)
        {
            cout<<isprime[i]<<" ";
            k++;
        }
        if(k==n)
        {
            cout<<endl;
            return 0;
        }
    }
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值