说明:本文为co_fun算法集训活动参考答案,有兴趣参与co_fun算法集训的同学可以关注b站 “co_fun算法内推社区” 获得群号。co_fun算法集训活动,针对算法基础一般的同学,从常见考点开始训练,每日三道题,会有讲解。三个月攻坚大厂笔试面试算法题。
2022.4.14-1
#include <iostream>
#define int long long
#define MAXN 200005
using namespace std;
char mp[105][205];
int dp[105][205];
signed main()
{
int n;cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=2*(n-i)+1; j++)
cin>>mp[i][j];
for(int i=1; i<=n; i++)
{
int cnt=0;
for(int j=2*(n-i)+1; j>=1; j--)
{
cnt++;
if(mp[i][j]!='-')cnt=0;
dp[i][j]=cnt;
}
}
int ans=0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=2*(n-i)+1; j++)
{
int num=0;
int x=i,y=j,now=1;
while(x>=0&&y>=0&&dp[x][y]>=now)
{
num+=now,now+=2;
if(j%2)x--;
else x++,y-=2;
}
ans=max(ans,num);
}
}
cout<<ans<<endl;
}
2022.4.14-2
#include <iostream>
#define int long long
#define MAXN 200005
using namespace std;
int get(int pos,bool f)
{
if(pos==1)return 0^f;
int n=1;
while(n*2<=pos)
n*=2;
if(n==pos)return 0^f;
return get(2*n-pos,!f);
}
signed main()
{
int T;cin>>T;
while(T--)
{
int n;cin>>n;
cout<<get(n,0)<<endl;
}
}
2022.4.14-3
#include <iostream>
#define int long long
#define MAXN 200005
using namespace std;
char mp[5][5];
int n,ans;
bool dfs(int x,int y,int nx,int ny)
{
if(mp[x][y]=='x')return false;
if(mp[x][y]=='.')return dfs(x+nx,y+ny,nx,ny);
else return true;
}
bool check(int x,int y)
{
bool ret=1;
ret&=dfs(x+1,y,1,0);
ret&=dfs(x-1,y,-1,0);
ret&=dfs(x,y+1,0,1);
ret&=dfs(x,y-1,0,-1);
return ret;
}
void cal()
{
int cnt=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(mp[i][j]=='x')
{
if(check(i,j))cnt++;
else return;
}
ans=max(ans,cnt);
}
void dfs(int x,int y)
{
if(y==n+1)y=1,x++;
if(x==n+1)
{
cal();
return;
}
dfs(x,y+1);
if(mp[x][y]=='.')
{
mp[x][y]='x';
dfs(x,y+1);
mp[x][y]='.';
}
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>mp[i][j];
dfs(1,1);
cout<<ans<<endl;
}
2022.4.15-1
#include <bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
unordered_set<string> us;
signed main()
{
int l,k;cin>>l>>k;
string s;cin>>s;
for(int i=0;i+l-1<s.size();i++)
us.insert(s.substr(i,l));
cout<<us.size()<<endl;
}
2022.4.15-2
#include <bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
int a[MAXN];
int n,m;
bool check(int x)
{
int cnt=0;
for(int i=1;i<=n;i++)
cnt+=a[i]/x;
return cnt>=m;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
double d;cin>>d;
a[i]=d*100;
}
int L=0,R=MAXN*100;
while(L<R)
{
int mid=(L+R+1)/2;
if(check(mid))L=mid;
else R=mid-1;
}
cout<<fixed<<setprecision(2)<<L/100.0<<endl;
}
2022.4.15-3
#include <bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
int mp[505][505];
int dp[505][505];
signed main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>mp[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+mp[i][j];
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,dp[n][i]);
cout<<ans<<endl;
}