• Codeforces Round #815 (Div. 2)


    Dashboard - Codeforces Round #815 (Div. 2) - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1720

    目录

    A. Burenka Plays with Fractions

    B. Interesting Sum

    C. Corners

    D1. Xor-Subsequence (easy version)


     

    A. Burenka Plays with Fractions

    题意:给你a/b和c/d,每次最多改动一个字母,问,最少几次两者可以改成一样的.

    思路,同分一下对于所有情况进行对比即可.

    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 a,b,c,d;
    8. cin>>a>>b>>c>>d;
    9. int temp=__gcd(b,d);
    10. a=a*d/temp;
    11. c=c*b/temp;
    12. if(a==c)
    13. cout<<"0"<<endl;
    14. else if(a==0||c==0||a%c==0||c%a==0)
    15. cout<<"1"<<endl;
    16. else
    17. cout<<"2"<<endl;
    18. return ;
    19. }
    20. signed main()
    21. {
    22. cin.tie(0);
    23. cout.tie(0);
    24. ios::sync_with_stdio(0);
    25. int t;
    26. cin>>t;
    27. while(t--)
    28. solve();
    29. return 0;
    30. }

    B. Interesting Sum

    题意,给你一个数组,对于某个区间1<=l<=r<=n求出max(a1,a2,…,al−1,ar+1,ar+2,…,an)−min(a1,a2,…,al−1,ar+1,ar+2,…,an)+max(al,…,ar)−min(al,…,ar).的最大值.

    思路:排序后用最大值减去最小值,次大值减去次小值即可.可以保证结果最优

    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. const int N =1e5+10,mod=998244353;
    5. int a[N];
    6. bool cmp(int a,int b)
    7. {
    8. return a<b;
    9. }
    10. void solve()
    11. {
    12. int n;
    13. cin>>n;
    14. for(int i=1;i<=n;i++)
    15. cin>>a[i];
    16. sort(a+1,a+1+n,cmp);
    17. cout<<a[n]+a[n-1]-a[1]-a[2]<<endl;
    18. return ;
    19. }
    20. signed main()
    21. {
    22. cin.tie(0);
    23. cout.tie(0);
    24. ios::sync_with_stdio(0);
    25. int t;
    26. cin>>t;
    27. while(t--)
    28. solve();
    29. return 0;
    30. }

    C. Corners

    思路:每次我们可以选择一个含有至少一个1的L形状(2*2小正方形缺一角)吧这个L里面的数全部置为0,问最多几步可以把这个01矩阵全部转换为0.

    思路:当你的任意一个一个小正方形里面包含有两个即以上的0时,你会发现我们可以实现每一步只消去1个1,然后邻近的正方形消去1个1也只需要一步.而当每个小正方形最多只含有1个0时,需要先一步消去两个1然后在每步消去1个1.当不含有0时,则需要一步消去三个1之后才能做到一步消去1个1.

    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. const int N =5e2+10,mod=998244353;
    5. char ma[N][N];
    6. void solve()
    7. {
    8. int num=0,n,m,flag=0;
    9. cin>>n>>m;
    10. for(int i=1;i<=n;i++)
    11. scanf("%s",ma[i]+1);
    12. for(int i=1;i<=n;i++)
    13. for(int j=1;j<=m;j++)
    14. if(ma[i][j]=='1')
    15. num++;
    16. for(int i=1;i<n;i++)
    17. for(int j=1;j<m;j++)
    18. if(ma[i][j]+ma[i+1][j]+ma[i][j+1]+ma[i+1][j+1]-4*'0'<=2)
    19. flag=1;
    20. if(num==n*m)
    21. cout<<num-2<<endl;
    22. else
    23. if(!flag)
    24. cout<<num-1<<endl;
    25. else
    26. cout<<num<<endl;
    27. return ;
    28. }
    29. signed main()
    30. {
    31. int t;
    32. cin>>t;
    33. while(t--)
    34. solve();
    35. return 0;
    36. }

    D1. Xor-Subsequence (easy version)

    题意:给定一个数组a(下标从0开始).请找出一个最长的子序列,下标为b_{0},b_{1},b_{2},b_{3}...,b_{m-1}.且这个子序列保证a_{b_{p}}\bigoplus b_{p+1}<a_{b_{p+1}}\bigoplus b_{p}.保证a[i]<=200;求最长的子序列长度.

    思路:这个题说实话有点难读懂.针对于可以链接成子序列的两个值的下标我们可以看成i,j,那么式子就变成了:a_{i}\bigoplus j<a_{j}\bigoplus i.那么就很好看懂了,只需要枚举i,j然后进行普通的线性dp.因为两者可以链接,那么状态转移方程式为:f_{j}=max(f_{j},f_{i}+1).但是有一个问题就出现了.复杂度就进而变为了:O(n*n).铁定超时.就思考一下如何优化.

    针对于式子a_{i}\bigoplus j<a_{j}\bigoplus ij>i的情况下.可以发现200的最高位为2^{7},如果把他们二进制全部化为1的话就是255.异或运算在上述不等式可以让i和j造成的最大差距就是255.也就是说.我们只需要枚举i后面最多255的j即可.那么枚举剪枝复杂度变为O(200*n).

    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. const int N =3e5+10,mod=998244353;
    5. int f[N],a[N];
    6. void solve()
    7. {
    8. int n,ans=0;
    9. cin>>n;
    10. for(int i=1;i<=n;i++)
    11. f[i]=1,cin>>a[i];
    12. for(int i=1;i<=n;i++)
    13. for(int j=i+1;j<=min(n,i+256);j++)
    14. if(((i-1)^a[j])>((j-1)^a[i]))
    15. f[j]=max(f[i]+1,f[j]);
    16. for(int i=1;i<=n;i++)
    17. ans=max(ans,f[i]);
    18. cout<<ans<<endl;
    19. return ;
    20. }
    21. signed main()
    22. {
    23. cin.tie(0);
    24. cout.tie(0);
    25. ios::sync_with_stdio(0);
    26. int t;
    27. cin>>t;
    28. while(t--)
    29. solve();
    30. return 0;
    31. }

  • 相关阅读:
    面对突如其来的 GC 问题如何下手解决
    论文阅读-可泛化深度伪造检测的关键
    【数据库原理及应用】——SQL概述及数据定义(学习笔记)
    C++类与对象——封装
    Failed to find a valid digest in the 'integrity' attribute for resource
    ISP图像信号处理——平场校正介绍以及C++实现
    nginx转发mysql端口
    运行huggingface Kosmos2报错 nameerror: name ‘kosmos2tokenizer‘ is not defined
    MySql ocp认证之主从复制(六)-如何解决复制延迟的问题
    【Python机器学习】利用专家知识
  • 原文地址:https://blog.csdn.net/qq_49593247/article/details/126418398