恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至华为、字节…
作者@TechGuide【全网同名】
点赞再看,养成习惯,您动动手指对原创作者意义非凡
米小游准备做一些甜甜花酿鸡。
已知做一个甜甜花酿鸡,需要 22 个甜甜花和 22 个禽肉。米小游现在有 a 个甜甜花, b 个禽肉,以及 c 个万能食材(每个万能食材可以当作一个甜甜花或者一个禽肉)
米小游想知道,自己最多可以做多少只甜甜花酿鸡?
输入三个整数a, b, c , 用空格隔开。
3 3 3
一个整数,代表可以制作的甜甜花酿鸡的最大数量。
2
可以将两个万能食材当作一个甜甜花和一个禽肉,所以是 4 4 1 可以制作两个甜甜花酿鸡。
a, b, c = map(int, input().split())
if a > b:
a, b = b, a
f = min(b - a, c)
c -= f
a += f
a += c // 2
print(a // 2)
# vx公众号关注TechGuide 实时题库 闪电速递。
# 代码可能需要少量调试,更多欢迎进入菜单【真题爆料】讨论题解思路
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long a, b, c;
a = sc.nextLong();
b = sc.nextLong();
c = sc.nextLong();
if (a > b) {
long temp = a;
a = b;
b = temp;
}
long f = Math.min(b - a, c);
c -= f;
a += f;
a += c / 2;
System.out.println(a / 2);
}
}
// vx公众号关注TechGuide 实时题库 闪电速递
// 代码可能需要少量调试,更多欢迎进入【真题爆料】讨论题解思路
米小游最近在研究 n 皇后问题。 所谓 n 皇后问题,指 n×n 的棋盘中,放置 n 个皇后,满足两两之间不会互相攻击。
每个皇后可以攻击同一行、同一列以及同一 4545 度角斜线和 135135 度角斜线上的所有其他皇后。
米小游拿到了一个 n×n 的棋盘,目前已经放置了一些皇后,米小游希望再放置一个皇后, 满足所有的皇后不会互相攻击。
你能帮米小游求出有多少种放置方案吗?
第一行输入一个正整数 n ,代表棋盘大小。
接下来的 n 行,每行输入一个仅由 … 和 ∗∗ 组成的字符串,其中 ∗∗ 代表放置了一个皇后, … 代表未放置皇后。
保证输入的棋盘中没有两个皇后会互相攻击。1≤n≤1000
3
.*.
...
...
输出米小游有多少种放置方案。
2
n = int(input())
maxn = 1005
a = [[0] * maxn for _ in range(maxn)]
c = [0] * maxn
r = [0] * maxn
x = [0] * (maxn * 2)
y = [0] * (maxn * 2)
ok = True
for i in range(1, n + 1):
t = input()
t = '#' + t
for j in range(1, n + 1):
if t[j] == '*':
a[i][j] = 1
if r[i] or c[j] or x[i - j + n] or y[i + j]:
ok = False
r[i] += 1
c[j] += 1
x[i - j + n] += 1
y[i + j] += 1
if not ok:
print(0)
exit(0)
cnt = 0
for i in range(1, n + 1):
for j in range(1, n + 1):
if a[i][j] == 1:
continue
if r[i] or c[j] or x[i - j + n] or y[i + j]:
continue
cnt += 1
print(cnt)
# vx公众号关注TechGuide 实时题库 闪电速递
# 代码可能需要少量调试,更多欢迎进入【真题爆料】讨论题解思路
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
final int maxn = 1005;
int[][] a = new int[maxn][maxn];
int[] c = new int[maxn], r = new int[maxn], x = new int[maxn * 2], y = new int[maxn * 2];
int n = sc.nextInt();
boolean ok = true;
for (int i = 1; i <= n; i++) {
String t = sc.next();
t = '#' + t;
for (int j = 1; j <= n; j++) {
if (t.charAt(j) == '*') {
a[i][j] = 1;
if (r[i] || c[j] || x[i - j + n] || y[i + j]) {
ok = false;
}
r[i]++;
c[j]++;
x[i - j + n]++;
y[i + j]++;
}
}
}
if (!ok) {
System.out.println("0");
return;
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] == 1) continue;
if (r[i] || c[j] || x[i - j + n] || y[i + j]) continue;
cnt++;
}
}
System.out.println(cnt);
}
}
// vx公众号关注TechGuide 实时题库 闪电速递
// 代码可能需要少量调试,更多欢迎进入【真题爆料】讨论题解思路
米小游拿到了一棵树, 其中每条边被染成了红色或者蓝色。
米小游想选择一个点作为起点, 经过一些路径到达一 个终点,使得路径上相邻的两条边颜色不同。
米小游想知道,路径长度的最大值是多少?
第一行输入一个正整数 n , 代表节点数量。
接下来的 n−1 行,每行输入两个正整数 u,v 和一个字符 chr ,代表节点 u 和节点 v 有一条边连接。
若为 ′R′ 代表这条边是红色, ′B′ 代表这条边是蓝色。
1≤n≤105
1≤u,v≤n
保证输入的是一颗树。
4
1 2 R
2 3 B
3 4 B
一个正整数,代表米小游可以选择的路径最大长度。
2
选择 1−2−31−2−3 的路径即可。
import sys
sys.setrecursionlimit(100000)
MAXN = 2 * 100000 + 5
n = 0
edge = [[] for i in range(MAXN)]
dp = [[0 for j in range(2)] for i in range(MAXN)]
maxn = 0
def dfs(u, fa):
global maxn
if len(edge[u]) == 1 and edge[u][0][0] == fa: # 叶子节点直接 return,因为叶子节点的两个dp值肯定是0
return
for i in range(len(edge[u])):
now = edge[u][i]
v, col = now[0], now[1]
if v == fa: # 如果是父节点,continue,因为我们讨论的是以u为根节点的子树,而u的父节点肯定不属于这颗子树
# vx公众号关注TechGuide 实时题库 闪电速递
# 代码可能需要少量调试,更多欢迎进入【真题爆料】讨论题解思路
import java.util.*;
import java.io.*;
public class Main {
static final int MAXN = 2 * 100000 + 5;
static int n;
static Vector<Pair<Integer, Integer>>[] edge = new Vector[MAXN];
static int[][] dp = new int[MAXN][2];
static int maxn = 0;
static void dfs(int u, int fa) {
if (edge[u].size() == 1 && edge[u].get(0).first == fa) return; // 叶子节点直接 return,因为叶子节点的两个dp值肯定是0
for (int i = 0; i < edge[u].size(); i++) {
Pair<Integer, Integer> now = edge[u].get(i);
int v = now.first;
if (v == fa) continue; // 如果是父节点,continue,因为我们讨论的是以u为根节点的子树,而u的父节点肯定不属于这颗子树的
dfs(v, u); // 得到子节点答案
int col = now.second;
dp[u][col] = Math.max(dp[u][col], dp[v][col ^ 1] + 1); // dp状态转移,用子节点v更新u
maxn = Math.max(maxn, dp[u][0] + dp[u][1]); // 记录答案
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int u, v;
char ch;
for (int i = 1; i <= n; i++) {
edge[i] = new Vector<Pair<Integer, Integer>>();
}
for (int i = 1; i <= n - 1; i++) {
u = sc.nextInt();
v = sc.nextInt();
ch = sc.next().charAt(0);
edge[u].add(new Pair<Integer, Integer>(v, ch == 'R' ? 1 : 0));
edge[v].add(new Pair<Integer, Integer>(u, ch == 'R' ? 1 : 0)); // 建图
}
dfs(1, 0);
System.out.println(maxn);
}
}
class Pair<A, B> {
A first;
B second;
public Pair(A first, B second) {
this.first = first;
this.second = second;
}
}
// vx公众号关注TechGuide 实时题库 闪电速递
// 代码可能需要少量调试,更多欢迎进入【真题爆料】讨论题解思路