#美团笔试#
昨晚也跟着水了一把,算是白嫖试题,手比较热,5道全部AC(100%)
简单说一下
第一题straightforward,注意格式;比赛那个题单调栈;改bug那个二分搜索;四面体那个dp;最后一个题straightforward
代码放在下面回复,欢迎多多交流~
昨晚也跟着水了一把,算是白嫖试题,手比较热,5道全部AC(100%)
简单说一下
第一题straightforward,注意格式;比赛那个题单调栈;改bug那个二分搜索;四面体那个dp;最后一个题straightforward
代码放在下面回复,欢迎多多交流~
全部评论
&虽然我是非技术 但感觉好厉害哦
第五题:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Problem5 {
private static int matchTimes(String son, String mother) {
int res = 0;
int index = 0;
while (index < mother.length()) {
int t = mother.indexOf(son, index);
if (t >= 0) {
res ++;
index = t + 1;
} else {
break;
}
}
return res;
}
private static void solution(List<String> strs, String[] opers) {
boolean[] valid = new boolean[strs.size()];
for (String oper: opers) {
if (oper.startsWith("+")) {
valid[Integer.parseInt(oper.substring(1)) - 1] = false;
} else if (oper.startsWith("-")) {
valid[Integer.parseInt(oper.substring(1)) - 1] = true;
} else {
int count = 0;
String mother = oper.substring(1);
for (int i = 0; i < strs.size(); ++ i) {
if (valid[i]) {
continue;
}
count += matchTimes(strs.get(i), mother);
}
System.out.println(count);
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
int n = Integer.parseInt(line.trim().split(" ")[0]), k = Integer.parseInt(line.trim().split(" ")[1]);
List<String> strs = new ArrayList<>(k);
String[] opers = new String[n];
for (int i = 0; i < k; ++ i) {
strs.add(reader.readLine().trim());
}
for (int i = 0; i < n; ++ i) {
opers[i] = reader.readLine().trim();
}
solution(strs, opers);
}
}
第四题:
import java.util.Scanner;
public class Problem4 {
private static void solution(int k) {
long[][] recorder = new long[4][k + 1];
recorder[0][0] = 1;
long mod = 1000000007;
for (int i = 1; i < k + 1; ++ i) {
for (int j = 0; j < 4; ++ j) {
for (int m = 0; m < 4; ++ m) {
if (m == j) {
continue;
}
recorder[j][i] += recorder[m][i - 1] % mod;
recorder[j][i] %= mod;
}
recorder[j][i] %= mod;
}
}
System.out.println(recorder[0][k] % mod);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt();
solution(k);
}
}
第三题:
import java.util.Scanner;
public class Problem3 {
private static long pow(long number, long index) {
if (index == 0) {
return 1;
}
if (index == 1) {
return number;
}
long mid = index / 2;
long r1 = pow(number, mid);
return r1 * r1 * pow(number, index - 2 * mid);
}
private static long getDay(long x, long k) {
int day = 0;
int base = 1;
while (base <= x) {
day ++;
base *= k;
}
return day;
}
private static boolean single(long n, long k, long x) {
long days = getDay(x, k);
long res = 0;
long base = 1;
for (long i = 0; i < days; ++ i) {
res += (x / base);
base *= k;
}
return res >= n;
}
private static void solution(long n, long k) {
if (n == 1) {
System.out.println(1);
return;
}
long left = 2, right = n;
if (single(n, k, left)) {
System.out.println(2);
return;
}
while (left < right) {
//System.out.println(left + " --- " + right + " " + single(n, k, 8));
if (left + 1 == right) {
if (single(n, k, left)) {
System.out.println(left);
} else {
System.out.println(right);
}
return;
}
long mid = (left + right) / 2;
if (single(n, k, mid)) {
right = mid;
} else {
left = mid;
}
}
System.out.println(left);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(), k = scanner.nextInt();
solution(n, k);
//System.out.println(single(10, 3, 8));
}
}
第二题:
import java.util.Scanner;
import java.util.Stack;
public class Problem2 {
private static void solution(int[] players, int[] res) {
int[] projection = new int[players.length + 1];
for (int i = 0; i < players.length; ++ i) {
projection[players[i]] = i;
}
int[] resProjection = new int[players.length];
for (int i = 0; i < res.length; ++ i) {
resProjection[i] = projection[res[i]];
}
Stack<Integer> stack = new Stack<>();
int count = 0;
for (int i = 0; i < res.length; ++ i) {
while (! stack.empty() && resProjection[stack.peek()] > resProjection[i]) {
stack.pop();
count ++;
}
stack.push(i);
}
System.out.println(count);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] players = new int[length];
int[] res = new int[length];
for (int i = 0; i < length; ++ i) {
players[i] = scanner.nextInt();
}
for (int i = 0; i < length; ++ i) {
res[i] = scanner.nextInt();
}
solution(players, res);
}
}
第一题:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Problem1 {
private static void solution(long week, long hour, long minute, long delta) {
long day = delta / (60 * 24);
long rest = delta % (60 * 24);
long minuteNow = hour * 60 + minute;
if (rest > minuteNow) {
day ++;
minuteNow += 24 * 60;
}
week -= (day % 7);
if (week <= 0) {
week += 7;
}
minuteNow -= rest;
System.out.println(week);
long newMin = minuteNow / 60;
String minOut = "" + newMin, secondOut = "" + (minuteNow % 60);
if (newMin < 10) {
minOut = ("0" + newMin);
}
if ((minuteNow % 60) < 10) {
secondOut = ("0" + (minuteNow % 60));
}
System.out.println(minOut + ":" + secondOut);
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] lines = new String[3];
for (int i = 0; i < 3; ++ i) {
lines[i] = reader.readLine();
}
int week = Integer.parseInt(lines[0].trim());
String time = lines[1].trim();
String[] strs = time.split(":");
long hour = Long.parseLong(strs[0].trim());
long minute = Long.parseLong(strs[1].trim());
long delta = Long.parseLong(lines[2]);
solution(week, hour, minute, delta);
}
}
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享