当前位置:   article > 正文

Educational Codeforces Round 111 (Rated for Div. 2)

educational codeforces round 111 (rated for div. 2)

A. Find The Array

Problem - A - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1550/problem/A签到:

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int N =5e5+10,mod=998244353;
  5. void solve()
  6. {
  7. int n;
  8. cin>>n;
  9. int ans=sqrt(n);
  10. if(ans*ans<n)
  11. ans++;
  12. cout<<ans<<"\n";
  13. return ;
  14. }
  15. signed main()
  16. {
  17. int t;
  18. cin>>t;
  19. while(t--)
  20. solve();
  21. return 0;
  22. }

B. Maximum Cost Deletion

题意:给你一个01字符串,我们每次可以删除相连的且内部每个字符都相等的子串.每次删除的长度为l,那么对于答案的贡献就是a*l+b,a和b都是需要进行输入的.问最大贡献是多少.

思路:当n<0时,我们一个字符一个字符的取最大,当b<0时我们就要让加上的b的个数尽量的少,也就是取的次数尽量的少,我们就要么全部删除1,要么全部删除0,最后剩下的字符串一次删.呢么对于这些情况取max即可.

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int N =5e5+10,mod=998244353;
  5. void solve()
  6. {
  7. int n,a,b,ans;
  8. string s;
  9. cin>>n>>a>>b>>s;
  10. int cnt=1;
  11. for(int i=1;i<s.size();i++)
  12. {
  13. if(s[i]!=s[i-1])
  14. cnt++;
  15. }
  16. ans=max(n*a+b*(cnt/2+1),(a+b)*n);
  17. cout<<ans<<"\n";
  18. }
  19. signed main()
  20. {
  21. int t;
  22. cin>>t;
  23. while(t--)
  24. solve();
  25. return 0;
  26. }

C. Manhattan Subarrays

题目读错了,子串读成子序列...

题意:给你一个数组,定义某种计算:d(p,q)=|xp−xq|+|yp−yq|.定义坏东西:d(p,r)=d(p,q)+d(q,r).求一个数组中有多少个子数组,保证任取三个元素都是好东西.素组元素为(ai,i);

我们直接列出式子进行变形.设取i,j,k三个位置的数(i<j<k)

 在进行分析,当长度len==1,len==2时合法

len==3和len==4时进行判断,当n>=5了就肯定合法(总能枚举上升的)那么对于3,和4的情况枚举即可

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int N =5e5+10,mod=998244353;
  5. int a[200005];
  6. int check(int x,int y,int z)
  7. {
  8. if(x<=y&&y<=z)
  9. return 1;
  10. else if(x>=y&&y>=z)
  11. return 1;
  12. return 0;
  13. }
  14. void solve()
  15. {
  16. int n,ans;
  17. cin>>n;
  18. for(int i=1;i<=n;i++)
  19. cin>>a[i];
  20. ans=2*n-1;
  21. if(n>=3)
  22. {
  23. for(int i=1;i<=n-2;i++)
  24. if(check(a[i],a[i+1],a[i+2])==0)
  25. ans++;
  26. }
  27. if(n>=4)
  28. {
  29. for(int i=1;i<=n-3;i++)
  30. if(check(a[i],a[i+1],a[i+2])||check(a[i],a[i+1],a[i+3])||check(a[i],a[i+2],a[i+3])||check(a[i+1],a[i+2],a[i+3]));
  31. else
  32. ans++;
  33. }
  34. cout<<ans<<"\n";
  35. return ;
  36. }
  37. signed main()
  38. {
  39. int t;
  40. cin>>t;
  41. while(t--)
  42. solve();
  43. return 0;
  44. }

D才过了300人,直接skip

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55032
推荐阅读
相关标签
  

闽ICP备14008679号