日常训练(1)

时间:2020-06-10
本文章向大家介绍日常训练(1),主要包括日常训练(1)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

6月9日:牛客算法周练10  https://ac.nowcoder.com/acm/contest/5986#question

B题:

思路:采用二进制贪心,如果当前位置贡献为连续1的则记录答案。和线性基的想法类似,选择对于当前位存在贡献的一位。

关于线性基https://oi-wiki.org/math/basis/

代码如下

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=1e5+10;
 6 typedef long long ll;
 7 int main()
 8 {
 9     int a[maxn],n;
10     cin>>n;
11     for(int i=1;i<=n;i++)
12     {
13         scanf("%d",&a[i]);
14     }
15     ll ans=0;
16     for(int i=0;i<20;i++)
17     {
18         ll tmp=a[1],sum=0;
19         for(int j=1;j<=n;j++)
20         {
21             if(a[j]>>i&1)
22             {
23                 tmp&=a[j];
24                 sum+=a[j];
25                 ans=max(ans,tmp*sum);
26             }
27             else
28             {
29                 tmp=a[j+1];
30                 sum=0;
31             }
32         }
33     }
34     printf("%lld",ans);
35     return 0;
36 }

F题:

 思路:每条边被计算的数目等于这条边两边的节点的个数之积。然后按照积这个权值进行排序,依次赋值1,2 ......n-1

所以我们只要统计每个边的左侧和右侧有多少顶点就可以。

这里的DFS很不一样...

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long ll;
 7 const int maxn=1e5+10;
 8 
 9 vector<ll> q[maxn];
10 vector<ll> p;
11 ll n; 
12 
13 ll dfs(ll u,ll v)
14 {
15     ll sum=1;
16     for(int i=0;i<q[u].size();i++)
17     {
18         if(q[u][i]!=v)
19         {
20             sum+=dfs(q[u][i],u);
21         }
22     }
23     p.push_back(sum*(n-sum));
24     return sum;
25 }
26 int main()
27 {
28     ll a,b;
29     cin>>n;
30     for(int i=1;i<n;i++)
31     {
32         scanf("%d%d",&a,&b);
33         q[a].push_back(b);
34         q[b].push_back(a);
35     }
36     dfs(1,-1);
37     sort(p.begin(),p.end());
38     ll s=0,l=n-1;
39     for(int i=1;i<p.size();i++)
40     {
41         s+=p[i]*l;
42         l--;
43     }
44     printf("%lld",s);
45     return 0;
46 }

原文地址:https://www.cnblogs.com/theshorekind/p/13087525.html