• 牛客小白月赛77



    题目描述

    小Why有一个 2 行 2 列的方阵 A,每个格子上都有一个数字。

    小Why可以执行以下的操作至多一次:

    修改任意一个格子上的数字。

    小Why想知道他能否使得这个方阵每行每列之和相等。

    输入描述:

     
     

    以下两行,每行两个元素,其中第 iii 行第 jjj 列的元素为 Ai,j​ (0≤Ai,j​≤9)。

    输出描述:

    如果小Why能够使得方阵 A 每行每列之和相等,那么输出 "YES" (不含引号),否则输出 "NO" (不含引号)。
    

    示例1

    输入

    9 7
    7 7

    输出

    YES

    示例2

    输入

    1 2
    3 4

    输出

    NO
    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. #define int long long
    4. #define fp(i,a,b) for(int i=a;i<=b;++i)
    5. const int N=1e6+10;
    6. typedef double db;
    7. int a,b,c,d;
    8. signed main()
    9. {
    10. cin>>a>>b>>c>>d;
    11. int cnt=0;
    12. if(a==d)cnt++;
    13. if(b==c)cnt++;
    14. if(cnt>=1){
    15. cout<<"YES";
    16. }
    17. else{
    18. cout<<"NO";
    19. }
    20. return 0;
    21. }
    22. // a b c d a+b=c+d=a+c=b+d b=c a=d

     B

    题目描述

    小Why有一个长度为 n 的全排列 a,定义px​ 表示元素 x 在 a 中的下标。

    小Why先将上述 n 个元素映射为图 G 中的点,之后对于每个点 x ,都向 px​ 连一条边。在完成这些操作后,图 G 中一共出现了 m 个环(包括自环)。

    现在小Why告诉你可以对 a 执行以下操作任意多次:

    选择 a 中任意两个不同的元素,交换它们的位置。

    小Why只打算告诉你 n 和 m,他想考考你至少需要多少次操作才能使得 a 单调递增。

    输入描述:

    第一行包含两个整数 n,m (1≤m≤n≤10^9),表示图 G 中点的个数和环的个数。

    输出描述:

    输出一个整数,表示最少操作次数。

    示例1

    输入

    2 1

    输出

    1
    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. #define int long long
    4. #define fp(i,a,b) for(int i=a;i<=b;++i)
    5. const int N=1e6+10;
    6. typedef double db;
    7. int n,m;
    8. signed main()
    9. {
    10. cin>>n>>m;
    11. cout<<n-m;
    12. return 0;
    13. }
    14. // a b c d a+b=c+d=a+c=b+d b=c a=d

     

     C

    超市里一共有 n 个货架,m 个商品,一开始商品的位置是被打乱的,小Why需要将商品全部归位。
    小Why在给货架编号后,实现了每个商品所在货架必然在其应在货架之前。
    小Why决定手推购物车按编号顺序依次访问每个货架。在访问货架时,小Why可以执行以下两个操作任意多次:
     当购物车不为空时,将购物车中的一个商品放上货架。
     当货架不为空时,将货架上的一个商品放入购物车。
    当小Why跑完一趟后,如果仍有商品没被归位,那么小Why会再次返回 1 号货架重复以上过程。
    超市里的购物车同一时刻最多能放 k 个商品,且每个货架容量无限,请你告诉小Why至少需要跑多少趟才能将商品全部归位。

    输入描述:

     
     

    第一行包括三个整数 n,m,k (2≤n≤10^6,1≤m,k≤10^6),表示货架个数,商品个数和购物车容量。

    接下来 m 行,每行有两个整数 sti​,edi​(1≤sti​

    输出描述:

    输出一个整数,表示最少需要的趟数。

    示例1

    输入

    3 3 1
    1 2
    1 3
    2 3

    输出

    2
    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. #define int long long
    4. #define fp(i,a,b) for(int i=a;i<=b;++i)
    5. const int N=1e6+10;
    6. typedef double db;
    7. int n,m,k;
    8. int a[N];
    9. signed main()
    10. {
    11. cin>>n>>m>>k;
    12. fp(i,1,m){
    13. int x,y;
    14. cin>>x>>y;
    15. a[x]++,a[y]--;
    16. }
    17. int mmax=0;
    18. fp(i,1,n)
    19. {
    20. a[i]+=a[i-1];
    21. mmax=max(mmax,a[i]);
    22. }
    23. cout<<(mmax-1)/k+1;
    24. return 0;
    25. }

     思路:可以抽象为差分   

    对于一个商品假设一开始在1,然后要去4

    那么他在1-3这个区间就一定会占据一个购物车位置,因为在这期间不可能将它放下来

    这样就可以直接通过差分来维护在商品的“占据情况”。

    D

    题目描述

    小Why拿到了一个密码长度为 m 的密码锁,这个密码锁可输入内容无限,并只对最后输入的 m 位字符进行检测,检测正确时密码锁会解锁一次,同时清空包含检测正确字符串在内的之前的所有字符。

    小Why输入了一个长度为 n 的字符串 s 后,密码锁一共解锁了 k 次,请你告诉他有多少种密码是可能正确的。

    输入描述:

    第一行包含三个整数 n,m,k (1≤m∗k≤n≤106),表示字符串 s 的长度,密码长度和解锁次数。第二行包含一个长度为 n 的字符串 s,保证字符串 s 中只含有 0∼9 的数字。

    输出描述:

    输出一个整数,表示有多少种密码是可能正确的。

    示例1

    输入

    13 5 2
    1231234123123

    输出

    2
    

     我复习了一波字符串哈希  这个算法我老早忘记了  以至于蓝桥杯差了这个就国三。哭死

    字符串哈希模板:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. //#define int long long
    4. #define fp(i,a,b) for(int i=a;i<=b;++i)
    5. const int N=1e6+10;
    6. typedef double db;
    7. typedef unsigned long long ULL;
    8. int n,m;
    9. int l1,r1,l2,r2;
    10. const int pp=131;
    11. ULL h[N];
    12. ULL p[N];
    13. string s;
    14. ULL gets(int a,int b)
    15. {
    16. return h[b]-h[a-1]*p[b-a+1];
    17. }
    18. int main()
    19. {
    20. cin>>n>>m;
    21. cin>>s;
    22. s=" "+s;
    23. p[0]=1;
    24. for(int i=1;i<=n;i++)
    25. {
    26. h[i]=h[i-1]*pp+s[i];
    27. p[i]=p[i-1]*pp;
    28. }
    29. for(int i=1;i<=m;i++){
    30. cin>>l1>>r1>>l2>>r2;
    31. if(gets(l1,r1)==gets(l2,r2)){
    32. cout<<"Yes"<<"\n";
    33. }
    34. else{
    35. cout<<"No"<<"\n";
    36. }
    37. }
    38. return 0;
    39. }

     

    这道题也是字符串哈希  用map记录一下就行

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. //#define int long long
    4. #define fp(i,a,b) for(int i=a;i<=b;++i)
    5. const int N=1e6+10;
    6. typedef double db;
    7. typedef unsigned long long ULL;
    8. int n,m,k;
    9. const int pp=131;
    10. ULL h[N];
    11. ULL p[N];
    12. string s;
    13. ULL gets(int a,int b)
    14. {
    15. return h[b]-h[a-1]*p[b-a+1];
    16. }
    17. map<ULL,int>ma;
    18. map<ULL,int>last;
    19. int main()
    20. {
    21. cin>>n>>m>>k;
    22. cin>>s;
    23. s=" "+s;
    24. p[0]=1;
    25. for(int i=1;i<=n;i++)
    26. {
    27. h[i]=h[i-1]*pp+s[i];
    28. p[i]=p[i-1]*pp;
    29. }
    30. for(int i=1;i<=n;i++){
    31. if(i>=m){
    32. ULL g=gets(i-m+1,i);
    33. if(!last.count(g)||last[g]<=i-m){
    34. ma[g]++;
    35. last[g]=i;
    36. }
    37. }
    38. }
    39. int sum=0;
    40. for(auto x:ma){
    41. if(x.second==k){
    42. sum++;
    43. }
    44. }
    45. cout<<sum<<"\n";
    46. return 0;
    47. }

  • 相关阅读:
    React新手必懂的知识点
    Loss模块
    使用git上传代码至gitee入门(1)
    MyBatis框架中各种参数类型绑定的方式
    SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(下)
    Vue模板语法(下)
    Random频率太快,产生的随机数相同
    1686. 石子游戏 VI
    Centos7.9环境下keepalived结合nginx实现负载均衡的高可用(亲测版)
    OpenCV——图像细化算法
  • 原文地址:https://blog.csdn.net/m0_61949623/article/details/133278461