当前位置: 首页 > news >正文

2-29算法习题总结

贪心问题

小A的糖果

题目描述

小 A 有 n n n 个糖果盒,第 i i i 个盒中有 a i a_i ai 颗糖果。

小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 x x x,至少得吃掉几颗糖。

输入格式

输入的第一行是两个用空格隔开的整数,代表糖果盒的个数 n n n 和给定的参数 x x x

第二行有 n n n 个用空格隔开的整数,第 i i i 个整数代表第 i i i 盒糖的糖果个数 a i a_i ai

输出格式

输出一行一个整数,代表最少要吃掉的糖果的数量。

样例 #1

样例输入 #1

3 3
2 2 2

样例输出 #1

1

样例 #2

样例输入 #2

6 1
1 6 1 2 0 4

样例输出 #2

11

样例 #3

样例输入 #3

5 9
3 1 4 1 5

样例输出 #3

0

提示

样例输入输出 1 解释

吃掉第 2 盒中的一个糖果即可。


样例输入输出 2 解释

第 2 盒糖吃掉 6 6 6 颗,第 4 盒吃掉 2 2 2 颗,第 6 盒吃掉 3 3 3 颗。


数据规模与约定

  • 对于 30 % 30\% 30% 的数据,保证 n ≤ 20 n \leq 20 n20 a i , x ≤ 100 a_i, x \leq 100 ai,x100
  • 对于 70 % 70\% 70% 的数据,保证 n ≤ 1 0 3 n \leq 10^3 n103 a i , x ≤ 1 0 5 a_i, x \leq 10^5 ai,x105
  • 对于 100 % 100\% 100% 的数据,保证 2 ≤ n ≤ 1 0 5 2 \leq n \leq 10^5 2n105 0 ≤ a i , x ≤ 1 0 9 0 \leq a_i, x \leq 10^9 0ai,x109

代码如下:

package exercise.luogu.greedy;import java.util.Scanner;public class P3817 {public static void main(String[] args) {long sum=0;Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();int x=scanner.nextInt();int[] arr=new int[n];arr[0]=scanner.nextInt();if(arr[0]>x) {sum+=arr[0]-x;arr[0]=x;}for(int i=1;i<n;i++) {arr[i]=scanner.nextInt();if(arr[i]+arr[i-1]>x) {sum+=arr[i]+arr[i-1]-x;arr[i]=x-arr[i-1];}}System.out.println(sum);}
}

总结

这道题特别水了,我当时没想起来,导致我最后也没独立写出来,这个就是俩俩一对,避免最后一个,所以把第一个当成特例!

分治问题

A-B 数对

题目背景

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

题目描述

给出一串正整数数列以及一个正整数 C C C,要求计算出所有满足 A − B = C A - B = C AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个正整数 N , C N,C N,C

第二行, N N N 个正整数,作为要求处理的那串数。

输出格式

一行,表示该串正整数中包含的满足 A − B = C A - B = C AB=C 的数对的个数。

样例 #1

样例输入 #1

4 1
1 1 2 3

样例输出 #1

3

提示

对于 75 % 75\% 75% 的数据, 1 ≤ N ≤ 2000 1 \leq N \leq 2000 1N2000

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^5 1N2×105 0 ≤ a i < 2 30 0 \leq a_i <2^{30} 0ai<230 1 ≤ C < 2 30 1 \leq C < 2^{30} 1C<230

2017/4/29 新添数据两组

代码如下:

package exercise.luogu.binary;import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class P1102 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int c = sc.nextInt();Map<Integer, Integer> map = new HashMap<>();int []arr=new int[n];for (int i = 0; i < arr.length; i++) {arr[i]= sc.nextInt();map.put(arr[i], map.getOrDefault(arr[i],0)+1);}long res=0;for (int i = 0; i < arr.length; i++) {int b=arr[i]-c;res+=map.getOrDefault(b,0);}System.out.println(res);}
}

总结

这道题呢,反之就是说,要是知道map集合的这个方法的话会特别好写,我之前用过这个方法,但是这次我还是没有写出来,还是要多练多写多积累!

 map.put(arr[i], map.getOrDefault(arr[i],0)+1);res+=map.getOrDefault(b,0);
http://www.lryc.cn/news/308344.html

相关文章:

  • 当Linux 磁盘满了,查看大文件并删除
  • STL -萃取特性迭代器
  • python pandas写入csv
  • oracle 数据库建集群式数据库的DBLINK的语法
  • 基于JAVA的毕业设计分配选题系统 开源项目
  • Android 接入指纹识别
  • 如何通过代理IP安全使用Linkedln领英?
  • 嵌入式驱动学习第一周——定时器与延时函数
  • Tips杂记
  • 可以用numpy为for加速
  • cartographer ceres后端优化
  • day57 集合 List Set Map
  • 蓝桥杯:真题讲解3(C++版)附带解析
  • 继续预训练对大语言模型的影响
  • 关于空频变换的知识点
  • 纯css实现-让字符串在文字少时显示为居中对齐,而在文字多时显示为左对齐
  • 初学HTMLCSS——盒子模型
  • 吸猫毛空气净化器哪个好?推荐除猫毛好的宠物空气净化器品牌
  • 【玩转408数据结构】线性表——双链表、循环链表和静态链表(线性表的链式表示 下)
  • 分布式概念
  • vue中的ref/reactive区别及原理
  • 深度学习介绍与环境搭建
  • QT C++实践|超详细数据库的连接和增删改查操作|附源码
  • matlab:涉及复杂函数图像的交点求解
  • Unity(第二十二部)官方的反向动力学一般使用商城的IK插件,这个用的不多
  • nginx反向代理,获取客户端ip
  • 13 Codeforces Round 886 (Div. 4)G. The Morning Star(简单容斥)
  • CLion 2023:专注于C和C++编程的智能IDE mac/win版
  • 数据可视化基础与应用-02-基于powerbi实现连锁糕点店数据集的仪表盘制作
  • 前后端分离Vue+nodejs酒店公寓客房预订管理系统udr7l-java-php-django-springboot