acwing周赛啥水平

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了acwing周赛啥水平相关的知识,希望对你有一定的参考价值。

acwing周赛中等水平,本场比赛难度适中,第一题是一道模拟,第二题是一个简单的枚举,第三题是一道分类讨论。但是但是!!边界很关键,哦不被边界卡了2次。 参考技术A Acwing周赛一般要求参赛者具有中等水平的编程能力,比如基础的算法和数据结构,以及解决复杂问题的能力。

Acwing第 17 场周赛完结

事实证明,只要参加的次数够多,终有一天可以AK。
今天终于AK了一次。压线AK。
水平还是很菜,之前总感觉自己的水平正龟速上升。
现在终于明白了,只要一点点的进步,终有一天可以变强。

3971. 最小的商【难度: 简单 / 知识点: 暴力】


https://www.acwing.com/problem/content/3974/

#include<bits/stdc++.h>
using namespace std;
int t,n,k;
int main(void)
{
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        int ans=1e9;
        for(int i=0;i<n;i++)
        {
            int x; cin>>x;
            if(k%x==0) ans=min(ans,k/x);
        }
        cout<<ans<<endl;
    }
}

3972. 方格集数量【难度: 一般 / 难度: 思维 乘法原理】


https://www.acwing.com/problem/content/3975/
一行有k个1 那么不同的集合为 2k -1(减掉空集)
竖列同理,这里需要注意会有重复的,最后减掉重复的即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
int a[55][55],n,m;
LL ans;
int main(void)
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>a[i][j];
    for(int i=0;i<n;i++)
    {
        int cnt=0;
        for(int j=0;j<m;j++)
        {
            if(a[i][j]) cnt++;
        }
        ans+=(1ll<<cnt)-1;
        ans+=(1ll<<(m-cnt))-1;
    }
    for(int i=0;i<m;i++)
    {
        int cnt=0;
        for(int j=0;j<n;j++)
        {
            if(a[j][i]) cnt++;
        }
        ans+=(1ll<<cnt)-1;
        ans+=(1ll<<(n-cnt))-1;
    }
    cout<<ans-n*m;
    return 0;
}

3973. 无线网络【难度: 中 / 知识点: 二分+双指针】


https://www.acwing.com/problem/content/3976/

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5+10;
int a[N],b[N],n,m;
bool check(LL mid)
{
    for(int i=0,j=0;i<n;i++)
    {
        while(j+1<m&&b[j+1]<=a[i]) j++;
        if( abs(b[j]-a[i])>mid )//找到离a[i]最近的左右b[j]和b[j+1]
        {
            if(j+1>=m || abs(b[j+1]-a[i])>mid ) return false;
        }
    }
    return true;
}
int main(void)
{
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int j=0;j<m;j++) cin>>b[j];
    LL l=0,r=2e9;
    while(l<r)
    {
        LL mid=l+r>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l;
    return 0;
}

以上是关于acwing周赛啥水平的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 17 场周赛完结

Acwing周赛分享

Acwing第 53 场周赛完结

AcWing第23场周赛题解

AcWing第一场周赛

Acwing第 31 场周赛完结