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周赛啥水平的主要内容,如果未能解决你的问题,请参考以下文章