• PAT 2024年春季(乙级)


    补题链接:PAT 2024春(乙级)

    B-1 合成 2024

    给定n和m,让我们判断能不能由n个不同的偶数和m个不同的奇数组成2024。

    正难则反,我们考虑什么情况下不能组成2024。

    先从奇偶性判断,n个偶数一定是偶数,所以要组成2024(偶数),m个奇数一定也得是偶数,所以m一定要为偶数。

    再从大小判断,n个不同的偶数组成的数最小是 (2 + 2 * n)* n / 2 = (1 + n) * n ,m个奇数组成的最小的数是 (1 + 2 * m - 1) * m / 2 = m * m 。所以(1 + n) * n + m * m <= 2024

    1. t = int(input())
    2. while t :
    3. t -= 1
    4. n , m = map(int , input().split())
    5. s = (1 + n) * n + m * m
    6. if s <= 2024 and (m % 2 == 0) :
    7. print("yes")
    8. else :
    9. print("no")

    B-2 真爱99

    判断一个数从右往左每 2 位数断开成一个数字和从左往右每 2 位数断开成一个数字的和对99取模,值是否相同。

    (我这里使用的python,使用C++/C的同学还需要计算从右往左每 2 位数断开成一个数字的情况)

    1. def check(x) :
    2. y = x % 99
    3. sb = 0
    4. s = str(x)
    5. for i in range(0 , len(s) , 2) :
    6. u = ord(s[i]) - ord('0')
    7. if i + 1 < len(s) :
    8. u = u * 10 + (ord(s[i + 1]) - ord('0'))
    9. sb += u
    10. sb %= 99
    11. if sb == y :
    12. print("yes")
    13. else :
    14. print("no")
    15. t = int(input())
    16. while t :
    17. t -= 1
    18. n = int(input())
    19. check(n)

    B-3 字典存储

    给n个单词,求最大的一个单词所占的字节数(字符串末尾的结束符也占一个字节)

    1. n = int(input())
    2. mx = 0
    3. for i in range(n) :
    4. u = input()
    5. mx = max(mx , len(u) + 1)
    6. s = mx * n
    7. print(mx , s)

    B-4 盲文识别

    因为数据可能存在因重叠而导致的重复计算情况,所以我们要遍历每一个3*2的矩阵,注意输出的格式问题。

    1. #include
    2. using namespace std ;
    3. int n , m ;
    4. char s[110][110] ;
    5. int a[12] ;
    6. void check(int x , int y)
    7. {
    8. if(x + 2 >= n || y + 1 >= m) return ;
    9. int p = 0 ;
    10. for(int i = x ; i <= x + 2 ; i ++)
    11. for(int j = y ; j <= y + 1 ; j ++)
    12. if(s[i][j] == '*') p ++ ;
    13. if(p == 1 && s[x][y] == '*' ) a[1] ++ ;
    14. if(p == 2 && s[x][y] == '*' && s[x + 1][y] == '*') a[2] ++ ;
    15. if(p == 2 && s[x][y] == '*' && s[x][y + 1] == '*') a[3] ++ ;
    16. if(p == 3 && s[x][y] == '*' && s[x][y + 1] == '*' && s[x + 1][y + 1] == '*') a[4] ++ ;
    17. if(p == 2 && s[x][y] == '*' && s[x + 1][y + 1] == '*') a[5] ++ ;
    18. if(p == 3 && s[x][y] == '*' && s[x][y + 1] == '*' && s[x + 1][y] == '*') a[6] ++ ;
    19. if(p == 4 && s[x][y] == '*' && s[x][y + 1] == '*' && s[x + 1][y] == '*' && s[x + 1][y + 1] == '*') a[7] ++ ;
    20. if(p == 3 && s[x][y] == '*' && s[x + 1][y + 1] == '*' && s[x + 1][y] == '*') a[8] ++ ;
    21. if(p == 2 && s[x + 1][y] == '*' && s[x][y + 1] == '*') a[9] ++ ;
    22. if(p == 3 && s[x + 1][y] == '*' && s[x][y + 1] == '*' && s[x + 1][y + 1] == '*') a[0] ++ ;
    23. }
    24. signed main()
    25. {
    26. cin >> n >> m ;
    27. for(int i = 0 ; i < n ; i ++)
    28. cin >> s[i] ;
    29. for(int i = 0 ; i < n ; i ++)
    30. for(int j = 0 ; j < m ; j ++)
    31. check(i , j) ;
    32. for(int i = 1 ; i <= 9 ; i ++)
    33. cout << a[i] << " " ;
    34. cout << a[0] << endl ;
    35. return 0 ;
    36. }

    B-5 AI 评语

    对于PTA(包括天梯赛、睿抗、PAT等等)中常考的描述文字和要求较多的问题,我们拆分成多个问题,分别求解,对于姓名和五个数字的匹配,我们用map来储存(进而可以直接用map判断考生是否存在),用结构体来存这五个数字。

    求解每组数的中位数,与考生姓名无关,我们用5个vector来存储这五个类别的数字,排序后得到中位数。

    对于每个查询考生的输出,我们可以再用一个结构体来存差值,用cmp重载排序,按着题目格式进行输出。

    1. #include
    2. using namespace std ;
    3. const int N = 100010 ;
    4. int n , m ;
    5. mapint> mp ;
    6. struct e{
    7. int a , b , c , d , e ;
    8. }p[N] ;
    9. vector<int> q[6] ;
    10. int va , vb , vc , vd , ve ;
    11. struct f{
    12. int id , c ;
    13. }v[6] ;
    14. bool cmp(f x , f y)
    15. {
    16. if(x.c != y.c) return x.c > y.c ;
    17. return x.id < y.id ;
    18. }
    19. signed main()
    20. {
    21. cin >> n >> m ;
    22. for(int i = 1 ; i <= n ; i ++)
    23. {
    24. string s ;
    25. int a , b , c , d , e ;
    26. cin >> s >> a >> b >> c >> d >> e ;
    27. mp[s] = i ;
    28. p[i] = {a , b , c , d , e} ;
    29. q[0].push_back(a) , q[1].push_back(b) , q[2].push_back(c) , q[3].push_back(d) , q[4].push_back(e) ;
    30. }
    31. sort(q[0].begin() , q[0].end()) , sort(q[1].begin() , q[1].end()) , sort(q[2].begin() , q[2].end()) , sort(q[3].begin() , q[3].end()) , sort(q[4].begin() , q[4].end()) ;
    32. va = q[0][n / 2] , vb = q[1][n / 2] , vc = q[2][n / 2] , vd = q[3][n / 2] , ve = q[4][n / 2] ;
    33. while(m --)
    34. {
    35. string s ;
    36. cin >> s ;
    37. if(!mp.count(s)) cout << "Not Found" << endl ;
    38. else
    39. {
    40. int u = mp[s] ;
    41. v[1].id = 1 , v[1].c = p[u].a - va ;
    42. v[2].id = 2 , v[2].c = p[u].b - vb ;
    43. v[3].id = 3 , v[3].c = p[u].c - vc ;
    44. v[4].id = 4 , v[4].c = p[u].d - vd ;
    45. v[5].id = 5 , v[5].c = p[u].e - ve ;
    46. sort(v + 1 , v + 6 , cmp) ;
    47. vector<int> res ;
    48. for(int i = 1 ; i <= 5 ; i ++)
    49. if(v[i].c >= 0) res.push_back(v[i].id) ;
    50. for(int i = 1 ; i <= 5 ; i ++)
    51. if(v[i].c < 0) res.push_back(-v[i].id) ;
    52. for(int i = 0 ; i < 5 ; i ++)
    53. if(i != 4) cout << res[i] << " " ;
    54. else cout << res[i] << endl ;
    55. }
    56. }
    57. return 0 ;
    58. }

  • 相关阅读:
    语言模型的发展
    图像色彩空间的改变
    C#应用程序界面开发基础——窗体控制(1)——Form窗体(删除事件部分,没看懂)
    洛谷 P4815 狼人游戏 题解
    【Python爬虫】requests库get和post方法使用
    原生Android 以面向对象的方式操作canvas
    【Java每日一题】— —第二十题:杨辉三角(直角三角形)。(2023.10.04)
    三款Github Copilot的免费替代
    自定义表单、自定义流程、自定义页面、自定义报表应用开发平台
    (附源码)springboot 社区疫苗接种管理系统 毕业设计 281442
  • 原文地址:https://blog.csdn.net/weixin_50089904/article/details/136663063