201509-1数列分段
问题描述
给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段?
输入格式
输入的第一行包含一个整数n,表示数列中整数的个数。
第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔。输出格式
输出一个整数,表示给定的数列有多个段。
样例输入
8
8 8 8 0 12 12 8 0样例输出
5
样例说明
8 8 8是第一段,0是第二段,12 12是第三段,倒数第二个整数8是第四段,最后一个0是第五段。
评测用例规模与约定
1 ≤ n ≤ 1000,0 ≤ ai ≤ 1000。
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i]=scanner.nextInt();
}
scanner.close();
int count = 1;
for(int i=0;i<n-1;i++){
if(nums[i]!=nums[i+1]){
count++;
}
}
System.out.println(count);
}
}
201604-1折点计数
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i]=scanner.nextInt();
}
scanner.close();
int count = 0;
for(int i=1;i<n-1;i++){
int c1 = nums[i]-nums[i-1];
int c2 = nums[i+1]-nums[i];
if(c1*c2<0){
count++;
}
}
System.out.println(count);
}
}
201609-1最大波动
问题描述
小明正在利用股票的波动程度来研究股票。小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。
输入格式
输入的第一行包含了一个整数n,表示小明拿到的收盘价格的连续天数。
第二行包含n个正整数,依次表示每天的收盘价格。输出格式
输出一个整数,表示这只股票这n天中的最大波动值。
样例输入
6
2 5 5 7 3 5样例输出
4
样例说明
第四天和第五天之间的波动最大,波动值为|3-7|=4。
评测用例规模与约定
对于所有评测用例,2 ≤ n ≤ 1000。股票每一天的价格为1到10000之间的整数。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i]=scanner.nextInt();
}
scanner.close();
int count = 0;
for(int i=1;i<n;i++){
int c = nums[i]-nums[i-1];
count = Math.max(count,Math.abs(c));
}
System.out.println(count);
}
}
202104-2邻域均值
眉头一皱,发现事情并不简单
这不就是二维的前缀和嘛,又遇到了,真巧!
再复习一遍原理:
红=绿-蓝-紫+黄
记不清时候自己推导一下就好了!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//n个像素,每个元素为[0,L)内的整数,参数r,阈值t
int n = scanner.nextInt(), L = scanner.nextInt(), r = scanner.nextInt(), t = scanner.nextInt();
int[][] arr = new int[n+1][n+1];
int[][] sumArr = new int[n+1][n+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
arr[i][j]=scanner.nextInt();
sumArr[i][j]=sumArr[i-1][j]+sumArr[i][j-1]+arr[i][j]-sumArr[i-1][j-1];
}
}
scanner.close();
int count =0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int a = Math.max(1,i-r),b = Math.min(n,i+r),c = Math.max(1,j-r),d = Math.min(n,j+r);
int temp = (b-a+1)*(d-c+1);
if (temp*t>=sumArr[b][d]-sumArr[b][c-1]-sumArr[a-1][d]+sumArr[a-1][c-1]){
count++;
}
}
}
System.out.println(count);
}
}
201703-1分蛋糕
问题描述
小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。
请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕。输入格式
输入的第一行包含了两个整数n, k,意义如上所述。
第二行包含n个正整数,依次表示a1, a2, …, an。输出格式
输出一个整数,表示有多少个朋友分到了蛋糕。
样例输入
6 9
2 6 5 6 3 5样例输出
3
样例说明
第一个朋友分到了前3块蛋糕,第二个朋友分到了第4、5块蛋糕,第三个朋友分到了最后一块蛋糕。
评测用例规模与约定
对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 10000,1 ≤ ai ≤ 1000。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i]=scanner.nextInt();
}
scanner.close();
int count = 0;
int sum = 0;
for(int i=0;i<n;i++){
if(sum==0){
count++;
}
sum+=nums[i];
if(sum>=k){
sum=0;
}
}
System.out.println(count);
}
}
202009-1称检测点查询
import java.util.*;
/**
* @Author: zhang yu zhu
* @Date: 2021/11/30 15:57
*/
public class demo20 {
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(),X = scanner.nextInt(),Y=scanner.nextInt();
PriorityQueue<int[]> priorityQueue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1]!=o2[1])//按第二键值做参考,也就是distance
return o1[1]-o2[1];
else {//如果distance相同,按第一键值,也就是编号排序
return o1[0]-o2[0];
}
}
});
// lambda表达式写法:
// PriorityQueue<int[]> priorityQueue = new PriorityQueue<>((o1, o2) -> {
// if (o1[1]!=o2[1])
// return o1[1]-o2[1];
// else {
// return o1[0]-o2[0];
// }
// });
for (int i=0;i<n;i++){
int distance = (int) (Math.pow(X-scanner.nextInt() ,2) + Math.pow( Y-scanner.nextInt() ,2));
priorityQueue.add(new int[]{
i+1, distance
});
}
for (int i=0;i<3;i++){
System.out.println(priorityQueue.poll()[0]);
}
}
}
比较器升降序说明
//比较器升降序说明
Comparator<Object> cmp = new Comparator<Object>() {
public int compare(Object o1, Object o2) {
//升序
return o1-o2;
//降序
return o2-o1;
}
};
今日推歌
----《空》 徐海俏
不过是大梦一场空
不过是孤影照惊鸿
不过是白驹之过一场梦
梦里有一些相逢
有道是万物皆虚空
有道是苦海最无穷
有道是人生得意须尽欢
难得最是心从容