3.18上午美团暑期实习第二次笔试 AK
1、二维前缀和
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=1005;
int g[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,a,b;
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
g[x][y]++;
}
for(int i=1;i<=1000;i++)
{
for(int j=1;j<=1000;j++)
{
g[i][j]+=g[i-1][j]+g[i][j-1]-g[i-1][j-1];
}
}
int ans=0;
for(int i=1;i<=1000;i++)
{
for(int j=1;j<=1000;j++)
{
ans=max(ans,g[i][j]-g[max(0,i-a-1)][j]-g[i][max(0,j-b-1)]+g[max(0,i-a-1)][max(0,j-b-1)]);
}
}
cout<<ans<<endl;
return 0;
}
2、set
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=2e5+1000;
int n,k,a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
int ans=0;
for(int i=1;i<=n;i++)
{
set<int> s;
int j=i;
while(j<=n)
{
s.insert(a[j]);
if(s.size()>k)
break;
j++;
}
ans=max(ans,j-i);
}
cout<<ans<<endl;
return 0;
}
3、corner case挺多的
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=2e5+1000;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string s;
cin>>s;
int n=s.size();
s='#'+s;
int l=1,r=n;
vector<pii> pos;
while(l<r)
{
if(s[l]!=s[r])
pos.push_back({l,r});
l++,r--;
}
sort(pos.begin(),pos.end());
if(pos.size()==0)
{
for(int i=1;i<=n;i++)
{
if(s[i]!='a')
{
s[i]=s[n-i+1]='a';
break;
}
}
}
else if(pos.size()==1)
{
if(s[pos[0].x]=='a'||s[pos[0].y]=='a')
{
if(n&1)
{
s[(n+1)/2]='a';
}
}
s[pos[0].x]=s[pos[0].y]='a';
}
else
{
char c=min(s[pos[0].x],s[pos[0].y]);
s[pos[0].x]=s[pos[0].y]=c;
c=min(s[pos[1].x],s[pos[1].y]);
s[pos[1].x]=s[pos[1].y]=c;
}
for(int i=1;i<=n;i++)
cout<<s[i];
return 0;
}
4、背包dp
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=2e5+1000;
int a[N],b[N];
int dp[105][5005][55],cost[105][5005][55];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,x,y;
cin>>n>>x>>y;
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=x;j++)
{
for(int k=0;k<=y;k++)
{
dp[i][j][k]=dp[i-1][j][k];
cost[i][j][k]=cost[i-1][j][k];
if(j-a[i]>=0)
{
if(1+dp[i-1][j-a[i]][k]>dp[i][j][k])
{
dp[i][j][k]=1+dp[i-1][j-a[i]][k];
cost[i][j][k]=cost[i-1][j-a[i]][k]+a[i];
}
else if(1+dp[i-1][j-a[i]][k]==dp[i][j][k])
cost[i][j][k]=min(cost[i][j][k],cost[i-1][j-a[i]][k]+a[i]);
}
if(j-b[i]>=0&&k>=1)
{
if(1+dp[i-1][j-b[i]][k-1]>dp[i][j][k])
{
dp[i][j][k]=1+dp[i-1][j-b[i]][k-1];
cost[i][j][k]=cost[i-1][j-b[i]][k-1]+b[i];
}
else if(1+dp[i-1][j-b[i]][k-1]==dp[i][j][k])
cost[i][j][k]=min(cost[i][j][k],cost[i-1][j-b[i]][k-1]+b[i]);
}
}
}
}
int mn=1e9;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=x;j++)
{
for(int k=0;k<=y;k++)
{
//cout<<i<<" "<<j<<" "<<k<<" "<<dp[i][j][k]<<" "<<cost[i][j][k]<<endl;
if(dp[i][j][k]==dp[n][x][y])
mn=min(mn,cost[i][j][k]);
}
}
}
cout<<dp[n][x][y]<<" "<<mn<<endl;
return 0;
}
5、dfs
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=2e5+1000;
int n,d[N],sum[N];
vector<int> g[N];
void dfs(int u,int fa,int dst)
{
if(dst<0)
return;
sum[u]++;
for(int v:g[u])
{
if(v!=fa)
dfs(v,u,dst-1);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>d[i];
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i=1;i<=n;i++)
dfs(i,0,d[i]);
for(int i=1;i<=n;i++)
cout<<sum[i]<<" ";
return 0;
}
#我的实习求职记录##我的实习日记#
科大讯飞公司氛围 420人发布