AtCoder Beginner Contest 300赛后总结

· · 个人记录

- AtCoder Beginner Contest 300 传送门

- A题 传送门 √

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=205;
int c[N];
void solve()
{
    int n,a,b;
    cin>>n>>a>>b;
    for (int i=1;i<=n;i++) cin>>c[i];
    for (int i=1;i<=n;i++){
        if (c[i]==a+b){
            cout<<i<<' ';
            return;
        }
    }
    return;
}
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int T=1;
    while (T--) solve();
    return 0;
}

- B题 传送门 √

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=205;
char a[N][N],b[N][N];
int H,W;
bool check(int x,int y)
{
    for (int i=1;i<=H;i++){
        for (int j=1;j<=W;j++){
            if (b[i][j]!=a[x+i][y+j]) return false;
        }
    }
    return true;
}
void solve()
{
    cin>>H>>W;
    for (int i=1;i<=H;i++){
        for (int j=1;j<=W;j++){
            cin>>a[i][j]; a[H+i][j]=a[i][W+j]=a[H+i][W+j]=a[i][j];
        }
    }
    for (int i=1;i<=H;i++){
        for (int j=1;j<=W;j++){
            cin>>b[i][j];
        }
    }
    for (int i=0;i<=H;i++){
        for (int j=0;j<=W;j++){
            if (check(i,j)){
                cout<<"Yes"<<'\n';
                return;
            }
        }
    }
    cout<<"No"<<'\n';
    return;
}
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int T=1;
    while (T--) solve();
    return 0;
}

- C题 传送门 √

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=205;
char a[N][N],b[N][N];
int ans[N];
void solve()
{
    int H,W,zsx,zsy,ysx,ysy,zxx,zxy,yxx,yxy,cnt;
    cin>>H>>W;
    for (int i=1;i<=H;i++){
        for (int j=1;j<=W;j++){
            cin>>a[i][j];
        }
    }
    for (int i=1;i<=H;i++){
        for (int j=1;j<=W;j++){
            zsx=i-1; zsy=j-1;
            ysx=i-1; ysy=j+1;
            zxx=i+1; zxy=j-1;
            yxx=i+1; yxy=j+1;
            if (a[i][j]=='#'){
                cnt=0;
                while (a[zsx][zsy]=='#' && a[ysx][ysy]=='#' && a[zxx][zxy]=='#' && a[yxx][yxy]=='#'){
                    cnt++;
                    zsx--; zsy--;
                    ysx--; ysy++;
                    zxx++; zxy--;
                    yxx++; yxy++;
                }
                ans[cnt]++;
            }
        }
    }
    for (int i=1;i<=min(H,W);i++) cout<<ans[i]<<' ';
    return;
}
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int T=1;
    while (T--) solve();
    return 0;
}

- D题 传送门 √

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+5,INF=1e18;
ll Prime[N],cnt,fi[N],miu[N];
bool isPrime[N];
void OLS(ll n)
{
    memset(isPrime,1,sizeof(isPrime));
    isPrime[0]=isPrime[1]=0; miu[1]=1;
    for (int i=2;i<=n;i++){
        if (isPrime[i]) Prime[++cnt]=i,fi[i]=i-1,miu[i]=-1;
        for (int j=1;j<=cnt && Prime[j]<=n/i;j++){
            isPrime[i*Prime[j]]=0;
            fi[i*Prime[j]]=fi[i]*fi[Prime[j]];
            miu[i*Prime[j]]=miu[i]*miu[Prime[j]];
            if (i%Prime[j]==0){
                fi[i*Prime[j]]=fi[i]*Prime[j];
                miu[i*Prime[j]]=0;
                break;
            }
        }
    }
    return;
}
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    OLS(1000000);
    ll n,ans=0;
    cin>>n;
    for (int i=3;i<=cnt;i++){
        if (Prime[i]*Prime[i]>n) break;
        for (int j=1;j<=i-2;j++){
            if (Prime[j]*Prime[j]*Prime[i]*Prime[i]>n) break;
            for (int k=j+1;k<=i-1;k++){
                if (Prime[j]*Prime[j]*Prime[k]*Prime[i]*Prime[i]>n) break;
                ans++;
            }
        }
    }
    cout<<ans<<'\n';
    return 0;
}

- E题 传送门 √

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+5,MOD=998244353;
ll Pow(ll a,ll b,ll p)
{
    ll ans=1%p,t=a%p;
    while (b){
        if (b&1) ans=ans*t%p;
        t=t*t%p; b>>=1;
    }
    return ans%p;
}
ll inv5;
map <ll,ll> mp;
ll dfs(ll n)
{
    ll ans=0;
    if (n==1) return 1ll;
    if (n%2==0){
        if (mp[n/2]==0) mp[n/2]=dfs(n/2);
        ans=(ans+mp[n/2])%MOD;
    }
    if (n%3==0){
        if (mp[n/3]==0) mp[n/3]=dfs(n/3);
        ans=(ans+mp[n/3])%MOD;
    }
    if (n%4==0){
        if (mp[n/4]==0) mp[n/4]=dfs(n/4);
        ans=(ans+mp[n/4])%MOD;
    }
    if (n%5==0){
        if (mp[n/5]==0) mp[n/5]=dfs(n/5);
        ans=(ans+mp[n/5])%MOD;
    }
    if (n%6==0){
        if (mp[n/6]==0) mp[n/6]=dfs(n/6);
        ans=(ans+mp[n/6])%MOD;
    }
    return ans*inv5%MOD;
}
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    inv5=Pow(5,MOD-2,MOD)%MOD;
    ll n;
    cin>>n;
    cout<<dfs(n)<<'\n';
    return 0;
}

- F题 传送门

- G题 传送门

- Ex题 传送门