• ACM实训冲刺第二十二天


    【碎碎念】今天学习ACM时间有点紧,只有30分钟,能写到哪算哪吧


    人见人爱A^B(数值运算与字符串处理)

    这段代码实现的是模幂运算,具体说是计算 A^Bmod1000 的值。模幂运算是一种在计算机科学和密码学中常用的算法,特别是用于处理大整数的幂运算时,通过取模可以控制结果的大小,减少计算量和避免整数溢出。

    该算法采用了循环(for 循环)来实现指数 B 次的乘法操作,并在每次乘法后都对结果取模 1000,这是快速幂算法的一个简化版本

    1. #include
    2. #include
    3. int main(){
    4. int A;
    5. int B;
    6. int C=1;
    7. while(scanf("%d %d",&A,&B) && A!=0,B!=0){
    8. for(int i=0;i
    9. C=(C*A)%1000;
    10. }
    11. printf("%d\n",C%1000);
    12. C=1;
    13. }
    14. return 0;
    15. }

    Tokitsukaze and All Zero Sequence (数据处理与逻辑判断)

    这段代码属于“数据处理与逻辑判断”题型。代码的主要功能是处理输入的数据(整数序列),并根据一定的逻辑规则判断和计算输出结果。

    具体来说,程序首先读取一个整数 t,表示有 t 组测试数据。对于每组数据,程序执行以下操作:

    1. 读取一个整数 n,表示接下来要输入的整数序列长度。
    2. 读取 n 个整数并存储在数组 a 中,同时使用另一个数组记录每个数字出现的次数。
    3. 判断数组中的元素是否有重复(通过标记变量 flag),以及是否包含数字0。
    4. 根据以下逻辑输出结果:
      • 如果数组中有数字0,则输出序列中非0数字的个数。
      • 如果没有数字0且所有数字都是唯一的,则输出当前序列长度加1,意味着可以在序列末尾添加一个新数字保持唯一性。
      • 如果有重复数字(不论是否含0),则输出当前序列长度,因为已经不满足所有数字唯一的要求。
    1. #include
    2. int main(){
    3. int t;
    4. scanf("%d",&t);
    5. for(int i=0;i
    6. int n;
    7. int flag=0;
    8. int ch;
    9. int a[101]={0};
    10. scanf("%d",&n) ;
    11. for(int j=0;j
    12. scanf("%d",&ch);
    13. a[ch]++;
    14. if(a[ch]>1)
    15. flag=1;
    16. }
    17. if(a[0]>0){
    18. printf("%d\n",n-a[0]);
    19. }else{
    20. if(flag==0)
    21. printf("%d\n",n+1);
    22. if(flag==1)
    23. printf("%d\n",n);
    24. }
    25. }
    26. return 0;
    27. }

    Aggressive cows(二分查找)

    这段代码实现的是一个二分查找(Binary Search)算法的应用问题,具体是解决“最长连续子序列的最小间距”问题的一个变种。给定一个整数数组和一个整数 c,要求找到一个最小的间距 m,使得在数组中能选出 c 个不重叠的连续子序列,每个子序列中的元素之间的间距至少为 m。

    代码流程如下:

    1. 输入序列长度 n 和需要放置的位置数量 c。
    2. 读取 n 个整数到数组 a 中,并对数组进行排序。
    3. 定义二分搜索的范围为数组中的最小值 l 到最大值 r。
    4. 在二分搜索的过程中,使用函数 fun() 判断以当前中点 mid 作为间距时,能否找到至少 c 个符合条件的位置。如果可以,则说明答案至少为 mid,并且在 mid 的右侧继续搜索;如果不满足条件,则在mid 的左侧搜索。
    5. 最终得到的ans 即为所求的最小间距。
    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int n,c;
    7. int a[100005];
    8. bool fun(int m) {
    9. int cnt=1,cur=0,next=1;
    10. while(next
    11. next++;
    12. if(a[next]-a[cur]>=m){
    13. cnt++;
    14. cur=next;
    15. }
    16. }
    17. if(cnt>=c) return true;
    18. else return false;
    19. }
    20. int main(){
    21. scanf("%d%d",&n,&c);
    22. for(int i=0;i
    23. scanf("%d",&a[i]);
    24. }
    25. int l=a[0],r=a[n-1];
    26. int ans=0;
    27. sort(a,a+n);
    28. while(l<=r){
    29. int mid=(l+r)/2;
    30. if(fun(mid)){
    31. ans=mid;
    32. l=mid+1;
    33. }else{
    34. r=mid-1;
    35. }
    36. }
    37. printf("%d",ans);
    38. return 0;
    39. }

    题型统计

    练习题名称数学计算与序列求和数值运算与字符串处理频率统计题数据处理与逻辑判断0-1背包问题最大覆盖半径二分查找
    SUM Problem
    A+B problem
    Anton and letters
    Sum of digits
    寒冰王座
    Charm Bracelet
    Vanya and Lanterns
    Anton and Danik
    人见人爱A^B
    Tokitsukaze and All Zero Sequence
    Aggressive cows

     

  • 相关阅读:
    脚手架应用场景之快速搭建项目
    Elasticsearch 的使用
    计算机毕业设计Java会展中心招商服务平台(源码+系统+mysql数据库+lw文档)
    中兴设备18种命令模式总结大全,全网第一篇,强烈建议收藏!
    【C++】特殊类的设计(只在堆、栈创建对象,单例对象)
    设计模式之适配器模式
    js之使用正则对象对字符串进行处理
    Vscode | Python | launch.json配置gevent多进程断点失效问题处理
    window mysql忘记密码解决方案
    QBC CriteriaQuery用法
  • 原文地址:https://blog.csdn.net/Echo323/article/details/139303080