通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
小美数学很好,小团数学不怎么好。有一天小美又在用数学题欺负小团,她提出了这样一个问题:“有多少个长度为n的仅由a和b组成的字符串既不包含aba也不包含bab?如果你算不来大数你可以告诉我这个问题的答案模上998244353是多少?”,小团实在忍不住了,所以他决定来找你帮忙。
输入描述
第一行有一个整数n(1<=n<=100000),代表小美问题中的参数。
3
输出描述
输出一个整数,即小美所问问额的答案除以998244353所得余数
6
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while ((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
if(n == 1 || n == 2){
System.out.println(n == 1 ? 2 : 4);
}else{
int[] dp = new int[n+1];
dp[1] = 2;
dp[2] = 4;
for (int i = 3; i <= n; i++) {
dp[i] = (dp[i-1]+dp[i-2]) % 998244353;
}
System.out.println(dp[n]);
}
}
}
// 关注TechGuide! 大厂笔经面经闪电速递!
#include
using namespace std;
const int MOD = 998244353;
int main(){
int n = 0;
cin >> n;
if(n == 1){
cout << 2 << endl;
return 0;
}
if(n == 2){
cout << 4 << endl;
return 0;
}
// same表示以最后两个字母相同,diff表示不同
int same = 2, diff = 2;
for(int i = 3; i <= n; i++){
int tmp = same;
same = (same + diff) % MOD;
diff = tmp;
}
int res = (same + diff) % MOD;
cout << res << endl;
return 0;
}
// 关注TechGuide! 大厂笔经面经闪电速递!
小美想坐公交去找小团玩,美团市中共有n个公交站,编号为1到n。同时也有m条公交线路,编号为1到m。小美想知道对于每一对公交站(i,j)从编号为i的站坐公交到编号为j的站至少需要乘坐几条不同的公交线路。
输入描述
第一行有两个空格隔开的整数n,m(1<=n<=500,1<=m<=500且1<=n+m<=500),代表公交站的个数和公交线路的条数。
接下来n行。每一行开头有一个整数k(1<=k<=m)。代表从这个站可以乘坐k条不同的公交线路。接下来有k个整数,代表这k条公交线路的编号,数字间用空格隔开。
输出描述
输出一个nxn的炮车,矩阵中第i行第j列的数代表从编号为i的站坐到编号为j的站至小需要乘坐多少条不同的公交线路,矩阵中每行中的元素由单个空格隔开,且行末不能有空格。
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信vx公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信vx公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
小美天天刷题,收获了很多ac,为了纪念这些ac,小美记下了一个长度为n的仅有a和c组成的字符串。小团天天摸鱼不刷题,所以ac没有小美多。小团决定在小美睡觉的时候把小美字符串中的ac通过交换相邻两个字符全部消除。即通过一系列交换相邻字符的操作使得操作后的串中不存在ac这个字串。小团想知道他至少要交换多少次才能达成他的目的。
输入描述
第一行有一个整数n(1<=n<=100000),代表小美拥有的字符串长度
第二行有一个仅由a和c组成的字符串,代表小美的字符串。
输出描述
输出一个整数,代表小团知道的答案
如样例acca中先交换前两个字符再交换中间两个字符即可使小美的字符串变成ccaa.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=Integer.parseInt(in.nextLine());
String input=in.nextLine();
int[] dp=new int[n+1];
char[] c=input.toCharArray();
int indexa=0;
if(c[0]=='a')
indexa=1;
for(int i=2;i<=n;++i){
if(c[i-1]=='c'&&c[i-2]=='a'){
dp[i] = dp[i-1] + i - indexa;
indexa++;
c[i-1]='a';
c[i-2]='c';
}
else{
if(c[i-1]=='a'&&indexa==0){
indexa=i;
}
dp[i]=dp[i-1];
}
}
System.out.println(dp[n]);
}
}
n=int(input())
nums=input()
res=0
while True:
count = nums.count('ac')
if count==0:
break
res += count
newnums = nums.replace('ac', 'ca', 100000)
nums=newnums
print(res)
# 关注TechGuide! 大厂笔经面经闪电速递!
#include
#include
using namespace std;
int main(){
int n = 0;
cin >> n;
string str;
cin >> str;
int idx = n - 1;
long long res = 0;
for(int i = n - 1; i >= 0; i--){
if(str[i] == 'a'){
res += (idx - i);
idx--;
}
}
cout << res << endl;
return 0;
}
// 关注TechGuide! 大厂笔经面经闪电速递!
小美有一张无向器。特别会数数的小团册拿个难题考一下小美,于是他决定询问小美这张无向图中有多少个不同的四边形、无向图中的四边形由四个不同的点a,b,c,d和四条属于这张无向图的边(a,b)(b,c)(c,d)(d,a)组成,若两个四边形的点集和边集相同,则我们认为这两个四边形是同一个四边形,小美的这张无向图有点大,她期望你帮她算出这个难题的答案。
输入描述
第一行有一个整数n代表这张无向图中的点数。
接下来n行给出这张无向图的邻接矩阵,每行有n个由空格隔开的整数,每个整数的值为0或1。
输入保证对角元为0,即这张图没有自环。
6
011100
101010
110001
100011
010101
001110
输出描述
输出一个整数,代表这张无向图中有多少个不同的四边形。
3
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信vx公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信vx公众号回复【美团】或者【贝壳】即可获得最实时的笔试题解啦!
给一个数组 给一个范围,然后去掉范围内最高最低求均值,叫切尾平均,找切尾平均最高的是哪一组。
核心是在给定一个数组 nums 和滑动窗口的大小 k时,求出最大值、最小值和前缀和,可以参考剑指59《滑动窗口最大值》。
链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/
import java.util.ArrayDeque;
import java.util.Scanner;
public class TechGuide {
static int[] input;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int m = s.nextInt();
input = new int[n];
for (int i = 0; i < n; i++) {
input[i]=s.nextInt();
}
System.out.println(solve(input,n,m)+1);
}
private static int solve(int[] input, int n, int m) {
ArrayDeque<Integer> maxIndex = new ArrayDeque<>();
ArrayDeque<Integer> minIndex = new ArrayDeque<>();
int resIndex = 0;
long curSum = 0;
for (int i = 0; i < m; i++) {
curSum=curSum+input[i];
putInto(maxIndex,minIndex,i);
}
long afterSum = curSum-findMax(maxIndex,0)-findMin(minIndex,0);
long maxSum = afterSum;
for(int j = m ; j < n ; j++){
int i = j-m;//i退出,j进入
curSum=curSum-input[i]+input[j];
putInto(maxIndex,minIndex,j);
afterSum=curSum-findMax(maxIndex,i+1)-findMin(minIndex,i+1);
if(afterSum>maxSum){
maxSum=afterSum;
resIndex=i+1;
}
}
return resIndex;
}
private static long findMin(ArrayDeque<Integer> minIndex, int i) {
while(minIndex.peekFirst()<i){
minIndex.pollFirst();
}
return input[minIndex.peekFirst()];
}
private static long findMax(ArrayDeque<Integer> maxIndex, int i) {
while(maxIndex.peekFirst()<i){
maxIndex.pollFirst();
}
return input[maxIndex.peekFirst()];
}
private static void putInto(ArrayDeque<Integer> maxIndex, ArrayDeque<Integer> minIndex, int i) {
int toPut = input[i];
while(!maxIndex.isEmpty() && toPut>=input[maxIndex.peekLast()]){
maxIndex.pollLast();
}
maxIndex.addLast(i);
while(!minIndex.isEmpty() && toPut<=input[minIndex.peekLast()]){
minIndex.pollLast();
}
minIndex.addLast(i);
}
}
// 关注TechGuide! 大厂笔经面经闪电速递!
关注TechGuide,大厂笔经面经闪电速递!