20230806米哈游笔试题解及代码分享
T1
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxl=1e6+10;
int n,m,ans;
inline void prework()
{
cin>>n;
vector<string> a(n);
vector<string> b(n);
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
int num=0;
for(int i=0;i<n;i++)
{
if(a[i]==b[i]) num++;
else num--;
if(num<0)
return;
}
ans++;
}
inline void mainwork()
{
}
inline void print()
{
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
cout<<ans;
return 0;
}
T2
从小开始打到半血,能使得后面获得更多的转圈圈,最后再把转圈圈全打完还不够需要继续普攻的加上
但是这样是错的,但是只有这种错解能过
5
1 2 3 3 10 ,这个输出6,但实际上攻击10 五次就打完了
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxl=1e6+10;
int n,m;ll ans=0;
int a[maxl],b[maxl];
inline void prework()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
int now=0;
for(int i=1;i<=n;i++)
{
int d=a[i]-(a[i]/2);
if(now<d)
{
ans+=d-now;
b[i]=d-now;
}
now++;
}
for(int i=1;i<=n;i++)
if(now+b[i]<a[i])
ans+=a[i]-(now+b[i]);
cout<<ans;
}
inline void mainwork()
{
}
inline void print()
{
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
// cin>>t;
for(int i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
return 0;
}
T3
把一个子树i挪到1节点,其实就是这棵子树所有点的深度减掉dep[i]-2,就可以直接算了
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxl=1e6+10;
int n,m;ll ans;
ll a[maxl],dep[maxl],suma[maxl],dp[maxl];
vector<int> e[maxl];
inline void prework()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<n;i++)
{
int u,v;cin>>u>>v;
e[u].emplace_back(v);
e[v].emplace_back(u);
}
}
inline void dfs(int u,int fa)
{
dp[u]=a[u];
suma[u]=a[u];
for(int v:e[u])
{
if(v==fa) continue;
dep[v]=dep[u]+1;
dfs(v,u);
suma[u]+=suma[v];
dp[u]+=dp[v]+suma[v];
}
}
inline void mainwork()
{
dep[1]=1;
dfs(1,0);
ans=dp[1];
for(int i=2;i<=n;i++)
{
ans=min(ans,dp[1]-(dep[i]-2)*suma[i]);
}
}
inline void print()
{
cout<<ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
// cin>>t;
for(int i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
return 0;
}
#笔试##米哈游##米哈游秋招##秋招笔试##秋招#


