关注
Java写的,为了图快变量名比较逗逼,请见谅
第一题
import java.util.*;
public class test1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int no = in.nextInt();
List<List<Integer>> kezhi = new ArrayList<>();
for(int i = 0; i < no; i++) {
String kezhi_str = in.next();
ArrayList<Integer> kezhi_lst = new ArrayList<>();
for(char c: kezhi_str.toCharArray()) {
kezhi_lst.add(c - '0');
}
kezhi.add(kezhi_lst);
}
int cnt = generateMethod(kezhi, no-1).size();
System.out.println(cnt);
}
}
public static List<Set<Integer>> generateMethod(List<List<Integer>> kezhi, int i) {
if(i == 0) {
List<Set<Integer>> res = new ArrayList<>();
for(int duishou: kezhi.get(0)) {
Set<Integer> duishoujihe = new HashSet<>();
duishoujihe.add(duishou);
res.add(duishoujihe);
}
return res;
} else {
List<Set<Integer>> zhiqianduishoujiheliebiao = generateMethod(kezhi, i-1);
List<Set<Integer>> res = new ArrayList<>();
for(Set<Integer> zhiqianduishoujihe: zhiqianduishoujiheliebiao) {
for(int duishou: kezhi.get(i)) {
if(!zhiqianduishoujihe.contains(duishou)) {
Set<Integer> xinduishoujihe = new HashSet<>();
xinduishoujihe.addAll(zhiqianduishoujihe); xinduishoujihe.add(duishou);
res.add(xinduishoujihe);
}
}
}
return res;
}
}
}
第一题简单地利用递归就能满足要求了,不用想得很复杂,就算超时了再改就行了
***************************************************************************************************
第二题
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLong()) {
int cost = in.nextInt();
long money = in.nextInt();
long cnt = 0;
long min_paid = (long)Math.ceil(cost/0.95);
long max_paid = Math.min((long)Math.floor(cost/0.90), money);
while(min_paid%5 != 0) min_paid++;
while (max_paid%5 != 0) max_paid--;
if(max_paid >= min_paid)
cnt = (max_paid - min_paid) / 5 + 1;
System.out.println(cnt);
}
}
}
第二题主要是int有可能会溢出,所以尽量用long,还有就是边界处理有一点麻烦
************************************************************************************************
第三题
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
long S = in.nextLong();
long cnt = 0;
for(long i = 0; i*i < S; i++) {
long resi = S - i*i;
if(hasRoot(resi)) cnt++;
}
System.out.println(cnt*4);
}
}
public static boolean hasRoot(long i) {
if(i == 0 || i == 1) return true;
long p = 0, r = i;
while(true) {
long q = p + (r-p)/2;
if(q*q > i) r = q;
else if(q*q < i) p = q;
else return true;
if(p > r) return false;
if(r-p <= 1) {
if(r*r == i || p*p == i) return true;
else return false;
}
}
}
}
第三题也是可能有溢出问题,所有直接上long,然后就是判断整数有没有根用了一个二分法
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 你觉得大几开始实习最合适? #
12195次浏览 123人参与
# 你都用vibe coding做过什么? #
6920次浏览 252人参与
# 厦门银行科技岗值不值得投 #
13193次浏览 309人参与
# 面试被问到不会的问题,你怎么应对? #
10816次浏览 102人参与
# 你现在一天AI几次? #
5532次浏览 70人参与
# 你见过哪些招聘隐形歧视? #
8754次浏览 76人参与
# 招商银行数字金融训练营 #
69782次浏览 805人参与
# 面试中,你被问过哪些奇葩问题? #
91820次浏览 867人参与
# 七猫笔试 #
6170次浏览 46人参与
# Vibe Coding 会干掉初级岗位吗? #
10308次浏览 144人参与
# AI Coding实战技巧 #
4409次浏览 107人参与
# 做完笔试后你收到面试了吗? #
11762次浏览 106人参与
# 大厂实习和小厂实习最大的区别是什么? #
21234次浏览 152人参与
# 如果人生可以debug你会改哪一行? #
4686次浏览 86人参与
# 2023年不发年终奖的公司盘点 #
30075次浏览 170人参与
# 四大天坑是哪四家? #
110991次浏览 239人参与
# 牛友の3月总结 #
15026次浏览 135人参与
# 秋招OC许愿 #
425035次浏览 2705人参与
# 金融财经春招备战日记 #
60762次浏览 253人参与
# uu们,春招你还来吗? #
51759次浏览 264人参与
# 面试吐槽bot #
182997次浏览 874人参与
# 26届春招投递记录 #
1313次浏览 21人参与
查看15道真题和解析