说明:本文为co_fun算法集训活动参考答案,有兴趣参与co_fun算法集训的同学可以关注b站 “co_fun算法内推社区” 获得群号。co_fun算法集训活动,针对算法基础一般的同学,从常见考点开始训练,每日三道题,会有讲解。三个月攻坚大厂笔试面试算法题。
2022.4.8-1
#include<bits/stdc++.h>
#define int long long
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
void solve()
{
int ans=0x3f3f3f3f3f3f3f3f;
int g,l;cin>>g>>l;
int lg=l/g;;
for(int i=1;i<=sqrt(lg);i++)
{
if(lg%i)continue;
if(gcd(i,lg/i)==1)
ans=min(ans,(i+lg/i)*g);
}
cout<<ans<<endl;
}
signed main()
{
int T;cin>>T;
while(T--)
solve();
}
2022.4.8-2
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
int a[MAXN];
signed main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int ans=0;
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int p=lower_bound(a+j+1,a+1+n,a[i]+a[j])-a;
ans+=p-j-1;
}
}
cout<<ans<<endl;
}
2022.4.8-3
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
int a[MAXN];
signed main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int now=0,ans=0;
for(int i=1;i<=n;i++)
{
now=max(now,a[i]);
if(now==i-1)ans++;
}
cout<<ans<<endl;
}
2022.4.9-1
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
int a[MAXN];
signed main()
{
int n,m,k;cin>>n>>m>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
cout<<m/(k+1)*(a[n]*k+a[n-1])+m%(k+1)*a[n]<<endl;
}
2022.4.9-2
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
int pre[MAXN];
int cnt[MAXN];
signed main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
cin>>pre[i];
pre[i]+=pre[i-1];
}
int s;cin>>s;
cnt[0]++;
int ans=0;
for(int i=1;i<=n;i++)
{
if(pre[i]-s>=0)
ans+=cnt[pre[i]-s];
cnt[pre[i]]++;
}
cout<<ans<<endl;
}
2022.4.9-3
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
int siz[MAXN],ans=0;
vector<int> edge[MAXN];
void dfs(int now)
{
siz[now]++;
for(int i=0;i<edge[now].size();i++)
{
int to=edge[now][i];
dfs(to);
siz[now]+=siz[to];
}
ans+=siz[now];
}
signed main()
{
int n;cin>>n;
for(int i=1;i<n;i++)
{
int x,y;cin>>x>>y;
edge[x].push_back(y);
}
dfs(1);
cout<<ans<<endl;
}
2022.4.10-1
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
const int MOD=1e9+7;
int dp[1005][1005];
signed main()
{
int m,n;cin>>m>>n;
for(int i=1;i<=m;i++)
dp[i][1]=1;
for(int i=1;i<=n;i++)
dp[1][i]=1;
for(int i=2;i<=m;i++)
for(int j=2;j<=n;j++)
dp[i][j]=(dp[i-1][j]+dp[i][j-1]+dp[i-1][j-1])%MOD;
cout<<dp[m][n]<<endl;
}
2022.4.10-2
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c,d;
int e,f,g,h;
signed main()
{
cin>>a>>b>>c>>d;
cin>>e>>f>>g>>h;
int ans=0;
ans+=(c-a)*(d-b);
ans+=(g-e)*(h-f);
int x1=max(a,e);
int y1=max(b,f);
int x2=min(c,g);
int y2=min(d,h);
if(x1<x2&&y1<y2)
ans-=(x2-x1)*(y2-y1);
cout<<ans<<endl;
return 0;
}
2022.4.10-3
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
signed main()
{
string s;
while(cin>>s)
{
if(s.size()%2)
{
cout<<"NO"<<endl;
continue;
}
int flag=1;
for(int i=0;i<s.size()/2;i++)
if(s[i]!=s[i+s.size()/2])
flag=0;
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}