2022-08-20-字节8月模拟笔试
(随便做做,没一直在做,当然也确实不会)
一只摆烂,系统检测一直在作弊,不知道有没有事。
好多并查集、聚类这种操作。。。
// 100% 20'
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n,t;
cin>>n;
vector<bool> map(n);
vector<int> c(n);
for(int i=0;i<n;i++){
cin>>t;
map[i]=t==1;
}
for(int i=0;i<n;i++)
cin>>c[i];
int l=0,d=0,ans=0;
for(int i=0;i<n;i++){
if(map[i]){
l=d=l+c[i];
ans=max(ans,d);
}else{
l=d=max(0,l-c[i]);
ans=max(ans,d);
}
}
cout<<ans;
return 0;
}
// 暴力 89.5% 25’ 95ms
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
int adds(vector<unsigned long long int>& teams, const vector<vector<int>>& child, int e, long long int f){
int c=1;
for(int i=0;i<child[e].size();i++){
c += adds(teams,child,child[e][i],f);
}
teams[e]+=f*c;
return c;
}
int main(){
int n,l,o,a,b,d,e;
unsigned long long int f;
cin>>n>>l>>o;
vector<unsigned long long int> teams(n+1,0);
vector<int> fa(n+1,0);
vector<vector<int>> child(n+1);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=0;i<l;i++){
cin>>a>>b;
// int getfa=getfather(fa, a);
// fa[b]=getfa;
fa[b]=a;
child[a].push_back(b);
}
for(int i=0;i<o;i++){
cin>>d>>e;
if(d<3)cin>>f;
if(d==1){
while(fa[e]!=e){
teams[e]+=f;
e=fa[e];
}
teams[e]+=f;
}else if(d==2){
int c = adds(teams,child,e,f);
f=f*c;
e=fa[e];
while(fa[e]!=e){
teams[e]+=f;
e=fa[e];
}
teams[e]+=f;
}else{
cout<<teams[e]<<"\n";
}
}
return 0;
}
// 最后四分钟 27.36% 25‘
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++)
cin>>v[i];
long long sum=0;
for(auto i : v)
sum+=i;
int mind=sum;
for(int i=1;i<1<<n;i++){
int j=i;
int k=0;
int h=0;
while(j){
if(j&1){
h+=v[k];
}
k++;
j=j>>1;
}
if(mind>abs(sum-h-h))
mind=abs(sum-h-h);
}
cout<<mind;
return 0;
}
// 暴力 通过了两个测试用例 0% 30‘
#include<iostream>
#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<map>
using namespace std;
int main(){
int n,m,g,t,a,b;cin>>n>>m;
vector<vector<int>> tb(m);
unordered_set<int> team[n+1];
for(int i=1;i<=n;i++)
team[i].insert(i);
for(int i=0;i<m;i++){
cin>>g;
tb[i].resize(g);
for(int j=0;j<g;j++)
cin>>tb[i][j];
}
cin>>t;
vector<vector<int>>q(t,vector<int>(2));
map<int,map<int,int>> qp;
for(int i=0;i<t;i++){
cin>>q[i][0]>>q[i][1];
if(q[i][0]>q[i][1])
swap(q[i][0], q[i][1]);
qp[q[i][0]][q[i][1]]=i;
}
vector<int> ans(t);
for(int i=0;i<m;i++){
for(int j=1;j<tb[i].size();j++){
team[tb[i][0]].insert(team[tb[i][j]].begin(),team[tb[i][j]].end());
}
for(int j=1;j<tb[i].size();j++){
team[tb[i][j]]=team[tb[i][0]];
}
for(auto [w,e]:qp){
for(auto [r,y]:e){
if(team[tb[i][0]].count(w)&&team[tb[i][0]].count(r)){
// cout<<"y="<<y<<endl;
qp[w].erase(r);
ans[y]=i+1;
}
}
// if(qp[w].size()==0)
// qp.erase(w);
}
}
for(auto& i:ans)
cout<<i<<"\n";
return 0;
}#字节##模拟笔试##23秋招#
查看5道真题和解析
