杭电 OJ 1000-1009 Java解法

devtools/2024/9/22 9:47:21/

Problem Set

1000

高精度

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){System.out.println(sc.nextBigInteger().add(sc.nextBigInteger()));}}
}

1001

位运算防爆 1000题的阴影

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){long num= sc.nextLong();System.out.println((1+num)*num>>>1);}}
}

1002

还是开大数

记得输出没有空格

java">import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);long cnt=1;long n= sc.nextLong();for (long i = 0; i < n; i++) {BigInteger b1=sc.nextBigInteger();BigInteger b2=sc.nextBigInteger();System.out.println("Case"+cnt+":");System.out.println(b1+"+"+b2+"="+b1.add(b2));cnt++;}}
}

1003

将双层for循环替换成剪枝 还是没过

线性遍历过了 时间复杂度为O(2n) 

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int cnt = 1;long t = sc.nextLong();for (long i = 0; i < t; i++) {int n = sc.nextInt();long arr[] = new long[n + 1];long ans[] = new long[n + 1];for (int i1 = 1; i1 <= n; i1++) {arr[i1] = sc.nextLong();ans[i1] = arr[i1] + ans[i1 - 1];}long max = Integer.MIN_VALUE;int left = -1;int right = -1;long min = 0;for (int i1 = 1; i1 <= n; i1++) {if (ans[i1] - min > max) {max = ans[i1] - min;right = i1;left = findLeftIndex(ans, min, i1);}min = Math.min(min, ans[i1]);}System.out.println("Case " + cnt + ":");System.out.println(max + " " + left + " " + right);cnt++;}}private static int findLeftIndex(long[] ans, long min, int endIndex) {for (int i = 0; i < endIndex; i++) {if (ans[i] == min) {return i + 1;}}return -1;}
}

1004

java特有双列集合

默认开哈希 速度快

最后再遍历一次即可 时间复杂度O(n)

java">import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while (sc.hasNext()){long n= sc.nextLong();if(n==0)return;//双列集合存储Map<String,Long>map=new HashMap<>();for (long i = 0; i < n; i++) {//输入键String str= sc.next();//如果集合有键 把键对应的数值拿出来 加1 再放回去if(map.containsKey(str)){long num=map.get(str);num++;map.put(str,num);}//如果集合里没有键 把(键,1)放到集合里面去else map.put(str,1L);}//把键放到一个单列集合里Set<String> set=map.keySet();String s="";long ans=0;//遍历单列集合 找到值最大的键 记录for (String str : set) {if(map.get(str)>ans){s=str;ans=map.get(str);}}System.out.println(s);}}
}

1005

有取余必出现周期

对7取余就只能出现0到7

第三个数由第一个和第二个决定

两两组合 7*7 周期为49

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()) {long a = sc.nextLong();long b = sc.nextLong();long n = sc.nextLong();if (a == 0 && b == 0 && n == 0) return;//最大周期为49n %= 49;long ans1=1;long ans2=1;long ans3=1;if(n==1) System.out.println(1);else if(n==2) System.out.println(1);else {for (long i = 0; i < n - 2; i++) {ans3=(a*ans2+b*ans1)%7;ans1=ans2;ans2=ans3;}System.out.println(ans3);}}}
}

1006

数学题 恶心人

java">import java.util.Scanner;public class Main {// 定义常量static final int maxn = 12 * 60 * 60;static double hm, hs, ms;static double T_hm, T_hs, T_ms;// 初始化函数static void init() {double h = 1.0 / 120;double m = 1.0 / 10;double s = 6;hm = m - h;hs = s - h;ms = s - m;T_hm = 360 / hm;T_hs = 360 / hs;T_ms = 360 / ms;}// 最大值函数static double max(double a, double b, double c) {return Math.max(Math.max(a, b), c);}// 最小值函数static double min(double a, double b, double c) {return Math.min(Math.min(a, b), c);}// 主函数public static void main(String[] args) {Scanner scanner = new Scanner(System.in);init();while (scanner.hasNext()) {double n = scanner.nextDouble();if (n == -1) break;double[] a = new double[6];a[0] = n / hm;a[1] = n / hs;a[2] = n / ms;a[3] = (360 - n) / hm;a[4] = (360 - n) / hs;a[5] = (360 - n) / ms;double ans = 0;for (double i = 0; i <= maxn; i += T_hm) {for (double j = 0; j <= maxn; j += T_hs) {if (j + a[1] > i + a[3]) break;if (i + a[0] > j + a[4]) continue;for (double k = 0; k <= maxn; k += T_ms) {if (k + a[2] > i + a[3] || k + a[2] > j + a[4]) break;if (i + a[0] > k + a[5] || j + a[1] > k + a[5]) continue;double p = max(i + a[0], j + a[1], k + a[2]);double q = min(i + a[3], j + a[4], k + a[5]);if (q > p) {ans += q - p;}}}}double percentage = 100.0 * ans / maxn;System.out.printf("%.3f\n", percentage);}scanner.close();}
}

1007

不会

而且没看懂题解

分治算法是什么玩意

1008

枚举吧

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){int n= sc.nextInt();if(n==0)return;int ans=0;int sum=0;for (int i = 0; i < n; i++) {int temp= sc.nextInt();if(temp>ans){sum+=(temp-ans)*6;}else if(temp<ans){sum+=(ans-temp)*4;}ans=temp;sum+=5;}System.out.println(sum);}}
}

1009

贪心

先解性价比最高的做法

java">import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while (sc.hasNext()){int n= sc.nextInt();int m= sc.nextInt();if(n==-1&&m==-1)return;int arr1[]=new int[m];int arr2[]=new int[m];double arr3[]=new double[m];for (int i = 0; i < m; i++) {arr1[i]= sc.nextInt();arr2[i]= sc.nextInt();arr3[i]=arr1[i]*1.0/arr2[i];}double max=0;//性价比int ans=0;//记录最大值double sum=0;while (n>0){for (int i = 0; i < m; i++) {if(arr3[i]>max){max=arr3[i];ans=i;}}if(max==0)break;if(n>arr2[ans]){sum+=arr1[ans];arr3[ans]=0;n-=arr2[ans];}else {sum+=arr3[ans]*n*1.0;n=0;}max=0;}System.out.println(String.format("%.3f",sum));}}
}

http://www.ppmy.cn/devtools/32714.html

相关文章

eNSP-浮动静态路由配置

ip route-static 192.168.1.0 24 192.168.3.2 preference 60 #设置路由 目标网络地址 和 下一跳地址 preference值越大 优先级越低 一、搭建拓扑结构 二、主机配置 pc1 pc2 三、配置路由器 1.AR1路由器配置 <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入接…

为什么Bash中的“[“和“]“周围应该有空格

问题&#xff1a; 我试图编写一个使用 if 语句的 Bash 脚本。 if[$CHOICE -eq 1];脚本一直在报错&#xff0c;直到我在 [ 前后并在 ] 之前加了一个空格&#xff0c;如下所示&#xff1a; if [ $CHOICE -eq 1 ];我的问题是&#xff0c;为什么在 Bash 中方括号周围的空格如此重…

Scala 补充 正则、异常处理...

Scala 补充 正则、异常处理、类型信息处理 基于前几篇文章 (Scala介绍与环境搭建、Scala 第一篇 基础篇、Scala 第二篇 算子篇、Scala 第三篇 OOP篇) 补充 一、正则 1、匹配2、替换3、分割4、分组5、练习 二、异常处理三、类 型信息处理 一、正则 1、匹配 简单匹配 // 判断…

Colab - Introduction to Object Detection using TensorFlow Hub

Colab - Introduction to Object Detection using TensorFlow Hub 1. 源由2. TensorFlow Hub3. 目标检测3.1 举例 - EfficientDet/D4 COCO 20173.2 下载示例图像3.2.1 显示部分样本3.2.2 定义一个将类别ID映射到类别名称和颜色的字典 3.3 加载模型3.4 单张照片执行推理3.4.1 推…

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中&#xff0c;向量无处不在&#xff0c;我想很多人都使用过向量类的内置方法 normalized() 吧&#xff0c;我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘&#xff0c;以达到角色朝任一方向移动时速度都相等的效果&#xff0c;但内部具体是如何将该向量进…

设计模式之数据访问对象模式

在Java编程的浩瀚星海中&#xff0c;有一个模式低调却强大&#xff0c;它像是一位默默无闻的超级英雄&#xff0c;支撑起无数应用的数据脊梁——那就是数据访问对象&#xff08;DAO, Data Access Object&#xff09;模式&#xff01;想象一下&#xff0c;如果你能像操纵魔法一样…

Vue 组件间的数据绑定

在Vue组件中&#xff0c;v-model指令可以用来实现双向数据绑定。它用于将组件的属性和父组件中的数据进行双向绑定&#xff0c;使得当属性的值改变时&#xff0c;父组件中的数据也会相应地改变&#xff0c;并且当父组件中的数据改变时&#xff0c;属性的值也会相应地改变。 目…

第III章-ⅠVue3进阶语法

vue3进阶语法 setup 函数Vue方法计算属性及监听器methods方法 computed计算属性ref函数 watch 监听器Vue的表单绑定v-model实现表单绑定v-model修饰符 setup 函数 Vue 3 引入了组合式 API&#xff0c;其中核心是 setup 函数。这个函数是组件中所有 Composition API 特性的入口…