AcWing第37场周赛题解
第37场周赛活动链接
problem.A AcWing4296 合适数对
由于题目限制x,y都是非负整数,所以暴力即可,无需扩展欧几里得。
代码
#include <iostream>
using namespace std;
int main()
{
int n,a,b;
cin>>n>>a>>b;
for(int i=0;i*a<=n;i++)
if((n-i*a)%b==0)
{
cout<<"YES"<<endl;
cout<<i<<' '<<(n-i*a)/b<<endl;
return 0;
}
cout<<"NO"<<endl;
return 0;
}
problem.B AcWing4297 截断数组
前后缀数组与处理好之后,暴力枚举前缀和,然后用二分找到是否存在合法的后缀和,不断取max得到答案
代码
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
int n;
LL a[N],s[N],rev[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=n;i>=1;i--)
rev[i]=rev[i+1]+a[i];
LL maxv=0;
for(int i=1;i<=n;i++)
{
int l=i+1,r=n;
while(l<r)
{
int mid = l + r >> 1;
if (rev[mid]<=s[i]) r = mid;
else l = mid + 1;
}
if(rev[l]==s[i])
maxv=max(maxv,s[i]);
}
cout<<maxv<<endl;
return 0;
}
problem.C AcWing4298 搭档
匈牙利算法找二分图最大匹配即可,至于题目“当一对男女的魅力值相差不超过1时,他们才会愿意组成搭档。”作为建图规则,暴力枚举数据建图。
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int N = 105,M = 10010;
int n,m;
int a[N],b[N];
int h[N], e[M], ne[M], idx;
int match[N];
bool st[N];
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
bool find(int x)
{
for (int i = h[x]; i != -1; i = ne[i])
{
int j = e[i];
if (!st[j])
{
st[j] = true;
if (match[j] == 0 || find(match[j]))
{
match[j] = x;
return true;
}
}
}
return false;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
memset(h, -1, sizeof h);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(abs(a[i]-b[j])<=1)
add(i,j);
int res = 0;
for (int i = 1; i <= n; i ++ )
{
memset(st, false, sizeof st);
if (find(i)) res ++ ;
}
cout<<res<<endl;
return 0;
}

浙公网安备 33010602011771号