文章目录

  • A
  • B
  • C

A

原题链接4296. 合适数对


方法:
题目的数据量给的不是很大,直接双循环,通过公式暴力求解就好了。

#include<iostream>
using namespace std;int main(){int n,a,b;int flag=0;//(1)scanf("%d%d%d",&n,&a,&b);int t1;int t2;for(int i=0;i<=1000;i++){for(int j=0;j<=1000;j++){if(a*i+b*j==n){flag=1;//(2)t1=i;t2=j;break;}}if(flag)break;}if(flag){//(3)cout<<"YES"<<endl;cout<<t1<<" "<<t2;}elsecout<<"NO";
}

(1)令flag=0,用来表示当前并未找到符合条件的x,y。
(2)找到了x,y,这时就需要退出循环,因为要求找的x是所有方案中最小的。
(3)通过flag判断是否找到了x和y。

B

原题链接AcWing 4297. 截断数组


方法:
头尾双指针算法。

解析:

第一步:设置变量及其初始化。
left指针:指向数组的第一个数字
right指针:指向数组的最后一个数字
sum1:存储数组第一个数字
sum3:存储数组的最后一个数字
ans:用来表示最后输出的结果
第二步:进入循环
三个if语句:
1.第一个最为重要,通过头尾双指针进行前后遍历,只有当sum1数组数字总和=sum3数组时,才更新sum1数组的最大值ans。并让头尾指针各走一步,更新sum1和sum3数组的数据。
2.sum1数组的总和>sum3数组,right指针走一步,sum3数组加上下一个数据
3.sum1数组的总和<sum3数组,right指针走一步,sum1数组加上下一个数据。
第三步:输出结果ans
因为一共有两种情况:结果为0或者不为0
因为ans的初值为0,并且只有sum1数组数字总和=sum3数组时才进行更新。
所有包含了两种情况,不需要分类讨论。

#include<iostream>
using namespace std;
typedef long long ll;
const int N=200010;
ll n;
ll arr[N];int main(){scanf("%d",&n);for(ll i=0;i<n;i++)scanf("%d",&arr[i]);ll sum=0;ll left=0;ll right=n-1;ll sum1=arr[left];ll sum3=arr[right];while(left<right){if(sum1==sum3){sum=sum1;left++;right--;sum1+=arr[left];sum3+=arr[right];}else if(sum1>sum3){right--;sum3+=arr[right];  }else if(sum1<sum3){left++;sum1+=arr[left];}}cout<<sum;
}

C

原题链接AcWing 4298. 搭档


方法:排序+双指针两个数组同时遍历

解析:
第一步:初始化操作,设置双指针i,j分别指向两个数组的第一个数字
配对个数res
第二步:分别对男生,女生的魅力值进行从小到大排序
第三步:进行男女魅力值配对比较,如何对应位置的魅力值绝对值<=1,说明配对成功,两个指针++,res++。
如果男生的魅力值>女生,说明这个女生的魅力值太小,无人可以与其匹配,则让女生数组的指针++
反之,男生的魅力值小于女生,与上一步同理,男生数组的指针++

#include<iostream>
#include <algorithm>
using namespace std;
const int N=101;
int n,m;
int i=1,j=1;
int res;
int a[N];
int b[N];
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(int i=1;i<=m;i++)scanf("%d",&b[i]);sort(a+1,a+n+1);sort(b+1,b+m+1);while(i<=n&&j<=m){if(abs(a[i]-b[j])<=1){res++;i++;j++;}else if(a[i]>b[j])j++;else if(a[i]<b[j])i++;}cout<<res;
}
}

Acwing第37场周赛题解相关推荐

  1. Acwing第 37 场周赛【完结】

    目录 4296. 合适数对[签到] 4297. 截断数组[双指针] 4298. 搭档[贪心] 4296. 合适数对[签到] https://www.acwing.com/problem/content ...

  2. acwing第72场周赛题解

    4624. 最小值: 题目链接: 4624. 最小值 - AcWing题库 给定两个整数 a,b,请你计算并输出 a,b,⌊a+b3⌋ 这三个整数中的最小整数.⌊ ⌋ 表示下取整,即忽略小数部分,只取 ...

  3. Acwing第77场周赛题解

    T1:AcWing 4716. 进球 开哈希表存字母数量,一旦数目超过 ,就输出,水题 #include <iostream> #include <cstring> #incl ...

  4. 【题解】AcWing 第73场周赛题解

    A. 数对 题目链接:AcWing 4704. 数对 没啥好说的,题目意思都给你写在脸上了.直接暴力 O ( N 2 ) \mathcal{O}(N^2) O(N2). #include <io ...

  5. 【题解】AcWing 第71场周赛题解

    A. 三个整数 题目链接:AcWing 4621. 三个整数 一眼题,由于保证了一定有解,所以只需要保证 x , y x,y x,y 尽量大, z z z 尽量小即可.即 x x x 取 b b b, ...

  6. AcWing第 70 场周赛题解

    目录 4618. 两个素数 4619. 减法操作 4620. 旅行 4618. 两个素数 暴力枚举判断即可 bool is_primes(int x) {for(int i=2;i<=x/i;i ...

  7. AcWing第 71 场周赛题解

    目录 4621. 三个整数 4622. 整数拆分 4623. 买糖果 4621. 三个整数 按要求枚举 void solve() {int a,b,c,d;cin>>a>>b& ...

  8. LeetCode第 227 场周赛题解

    LeetCode第 227 场周赛题解 检查数组是否经排序和轮转得到 原题链接 https://leetcode-cn.com/problems/check-if-array-is-sorted-an ...

  9. 20201015:力扣第210场周赛题解(上)

    力扣第210场周赛题解上 题目 思路与算法 代码实现 写在最后 题目 括号的最大嵌套深度 最大网络秩 思路与算法 第一题典型的栈数据结构求最大栈长的题目 第二题是一个经典的出入度题目,本题更加简单,统 ...

最新文章

  1. LED是否可以将光能转换成电能?
  2. C语言中:在头文件中使用static定义变量意味着什么?
  3. c++新特性11 (6) =default
  4. Akka Types of dispatchers
  5. boost::range_reference相关的测试程序
  6. 搭建discuz论坛
  7. [转]Hamcrest使用方法实例
  8. P2680 运输计划(树上差分+lca+二分)
  9. 增加新分类daily——“每天学了啥?”
  10. 【渝粤题库】广东开放大学 社交礼仪 形成性考核
  11. 50个数据可视化最有价值的图表(附完整Python代码,建议收藏
  12. 管理动物园动物c++_中国动物园行业供需预测及投资潜力分析
  13. kubernetes资源--RC和RS
  14. ArcGIS 10.3 AddIN编译旧版本项目问题
  15. 简易计算器app的制作
  16. 3个工具助你玩转正则表达式
  17. Kaggle教程 机器学习中级3 分类变量
  18. TensorFlow 特征列介绍
  19. 前端热门工具简直不要太好用了!
  20. AutoCAD软件盗版

热门文章

  1. 【JVM】JVM内存结构之——常量池
  2. 《意大利 Capital 现代边柜》
  3. 解决chrome浏览器无法记住登录密码问题
  4. 百度智能云 x 小寻手表丨AI赋能,业务持续升级
  5. 100盏灯泡的开关问题
  6. 查看 Windows 端口被占用情况
  7. a标签js阻止跳转_js阻止a标签href跳转的方法
  8. Servlet的生命周期(简单易懂)
  9. idea/借阅系统的APP开发
  10. Squid代理服务器(传统/透明/反向代理、ACL访问控制、sarg日志分析)