携程实习生0506笔试-编程题

解题思路:

看坐标之和,奇数偶数不同字符即可。


解题思路:

题目应该是求连续的k长度最大值,遍历比较字符串,最后再取模。

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int k = scanner.nextInt();
        int p = scanner.nextInt();
        
        String cur = s.substring(0, k);
        int n = s.length();
        for (int i = k; i < n; i++) {
            String t = s.substring(i - k + 1, i + 1);
            if (t.compareTo(cur) > 0) {
                cur = t;
            }
        }
		// 高精度取模
        long sum = 0;
        for (int i = 0; i < k; i++) {
            sum = (sum * 10 + (cur.charAt(i) - '0')) % p;
        }
        
        System.out.println(sum);
    }
}

解题思路:

普通前缀积做不了,取模涉及除法就复杂起来了。线段树直接套就好了。静态线段树,并且只有区间查询。因为维护区间积只涉及乘法,可以取模。


3

1 2 3

1 2

2 3

解题思路:

只要一个数每位之和是三的倍数,这个数就是三的倍数。

以0为根结点,得到以每个节点i为根的子树的答案设为gij,即模3为j的个数。再以0为根结点,f0=g0,开始树形dp。具体地,root父节点遍历到一个子节点v,

k=(9+j-av%3)%3,让k+av模3是j。这样frootk代表所有v到root开始的路径模3为j的个数。

m=(3+k-aroot%3)%3,让m+aroot模3是k。这样gvk代表以v开始自己子树路径模3为k的个数。这被frootk包含,需要减去。

fvj=gvj+frootk-gvm;自己子树路径和模3为j,加上父节点除该子树外路线和模3为k的个数

采用先序遍历。

java 复制代码
package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class MyClass {
    int N=100005;
    int[][] g=new int[N][3];
    int[][] f=new int[N][3];
    int[] a=new int[N];
    List<ArrayList<Integer>> arr= new ArrayList<ArrayList<Integer>>();
    //获得以每个节点为根,其子树路径构成3倍数的个数
    void getG(int last,int root){
        int m=a[root]%3;
        g[root][m]=1;
        for(int i=0;i<arr.get(root).size();i++){
            int v=arr.get(root).get(i);
            if(v==last){
                continue;
            }
            getG(root,v);
            for(int j=0;j<3;j++){
                g[root][j]+=g[v][(j-m+3)%3];
            }
        }
//        System.out.println(Arrays.toString(g[root]));
    }
    //前序遍历每个节点,状态转移
    void getF(int last,int root){
        for(int i=0;i<arr.get(root).size();i++){
            int v=arr.get(root).get(i);
            if(v==last){
                continue;
            }
            for(int j=0;j<3;j++){
                int k=(9+j-a[v]%3)%3;
                int m=(9+k-a[root]%3)%3;
                f[v][j]=g[v][j]+f[root][k]-g[v][m];
            }
//            System.out.println(Arrays.toString(f[v]));
            getF(root,v);
        }

    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        MyClass myClass=new MyClass();
        int n;
        n=scanner.nextInt();
        for(int i=0;i<n;i++){
            myClass.a[i]=scanner.nextInt();
            myClass.arr.add(new ArrayList<>());
        }
        for(int i=0;i<n-1;i++){
            int u,v;
            u=scanner.nextInt();
            v=scanner.nextInt();
            myClass.arr.get(u-1).add(v-1);
            myClass.arr.get(v-1).add(u-1);
        }
        myClass.getG(-1,0);
        //初始化
        System.arraycopy(myClass.g[0], 0, myClass.f[0], 0, 3);
        myClass.getF(-1,0);
        for(int i=0;i<n;i++){
            System.out.println(myClass.f[i][0]);
        }
    }
}
相关推荐
Edward111111113 小时前
一AI名词
java·开发语言·数据库·学习
CTA终结者3 小时前
近期AI量化工具推荐,围绕最难推进的环节选择
人工智能·python
栈溢出了4 小时前
Redis repl_backlog 学习笔记
java·开发语言·redis·学习
谙忆4 小时前
Python 常用图像处理库速查:Pillow、OpenCV、rembg、pillow-simd 各擅长什么、怎么选
图像处理·python·pillow
Database_Cool_4 小时前
实时计数器/排行榜首选:阿里云 Tair 高并发数据结构实践
数据结构·数据库·阿里云·云计算
urkay-4 小时前
Kotlin Flow分类
android·开发语言·kotlin
敲代码的猴先生4 小时前
论文分享 | TensorAbuse:通过滥用TensorFlow API将AI模型转化为恶意软件
人工智能·python·语言模型·tensorflow·论文笔记
言乐64 小时前
Python视频相对亮度检测
数据库·python·计算机视觉·小程序·音视频
Csvn4 小时前
Python 开发技巧 · logging 最佳实践 —— 告别 print,搭建工程级日志系统
后端·python
并不喜欢吃鱼4 小时前
从零开始 C++----- 十五.一文吃透 C++ 异常:try-catch、栈展开、自定义异常、异常安全 noexcept 底层全剖析
java·开发语言·jvm