小工具知识网

当前位置: 首页 > 行业知识 > 2023年十四届蓝桥杯国赛(JavaB组)

行业知识

2023年十四届蓝桥杯国赛(JavaB组)

2026-11-06 22:17:09 来源:互联网转载

2023年十四届蓝桥杯国赛(JavaB组)

  • 前言
  • A: 互质
  • B: 逆元
  • C: 玩具
  • D: 不完整的等式
  • E: 星球
  • F: 序列
  • G: 电动车
  • H: 游戏
  • I: 非对称二叉树
  • J: 数和游戏

    前言

    2023.6.16: 出成绩了,国一第15前排靠后,算是完成任务

    先简单写写,数据范围可能有小错,等题面出来了再更新

    2024.6.1:已更新体面,更新 I 题题解


    A: 互质

    本题总分:5分


    【问题描述】

    求出在 [ 1 , 202 3 2023 ] [1,2023^{2023}] [1,20232023]范围内,有多少个整数与 2023 2023 2023 互质,答案对 1 0 9 + 7 10^9+7 109+7取模。

    【答案提交】

    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


    640720414


    md考试时脑抽把 1 1 1 给减掉了,白白丢了 5 5 5 分。。

    易得 2023 = 7 ∗ 17 ∗ 17 2023=7*17*17 2023=7∗17∗17,故可以先求出与2023不互质的数,然后总数减去即可。

    设 a a a 为因数有7的数, b b b 为因数有17的数, c c c 为因数有7*17=119的数,显然不互质的数的总量为: a + b − c a+b-c a+b−c.

    static long fpow(long a,long b) {    long res = 1;    a%=mod;    while(b>0) {    if(b%2==1) res = res*a%mod;    a = a*a%mod;    b/=2;    }    return res;    }        static void solve() throws IOException{    long res=fpow(2023,2023);    long a = fpow(2023,2023)*fpow(7,mod-2)%mod;    long b = fpow(2023,2023)*fpow(17,mod-2)%mod;    long c = fpow(2023,2023)*fpow(7*17,mod-2)%mod;    res = (res-a-b +c+2*mod)%mod;    pw.println(res);    }

    B: 逆元

    本题总分:5分


    【问题描述】

    给定质数 M = 2146516019 M=2146516019 M=2146516019, 求出在 [ 1 , 233333333 ] [1,233333333] [1,233333333]内所有自然数的逆元。则所有逆元的异或和为多少?

    【答案提交】

    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


    1307261675


    快速幂暴力求逆元,逐个异或,比赛时跑了大概10多分钟

    static long fpow(long a,long b) {long res = 1;    a%=mod;    while(b>0) {    if(b%2==1) res = res*a%mod;    a = a*a%mod;    b/=2;    }    return res;}    static void solve() throws IOException{mod = 2146516019;ans=0;for(int i=1;ilong res = fpow(i,mod-2);ans ^=res;}System.out.println(ans);}1,−⌊ip​⌋(p mod i)−1,​i=1i=1​(mod p)    mod = 2146516019;    long inv[] = new long[233333335];    inv[1]=1;    ans=1;    for(int i=2;i    inv[i] = (long)(mod-mod/i)*inv[(int)(mod%i)]%mod;    ans ^=inv[i];    }    pw.println(ans);}static int n,m,mod=(int)998244353,maxn=200005,inf=(int)1e9;static long ans=0,INF=(long)1e18;static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));static StreamTokenizer st = new StreamTokenizer(bf);public static void main(String[]args) throws IOException{int T = 1;while(T--0) solve();}static int I() throws IOException{st.nextToken();return (int)st.nval;}static void solve() throws IOException{n = I();long a[] = new long[maxn];for(int i=1;ians += a[i]*a[j];}System.out.println(ans);}}+,−,∗,/} 四个中的一个。                                    a                         ,                         b                         ,                         c                         ,                         o                         p                              a,b,c,op                  a,b,c,op 四个中一个会被                                    ?                              ?                  ? 代替,输出被代替的那个数或符号,保证有唯一解。static int n,m,mod=(int)998244353,maxn=200005,inf=(int)1e9;static long ans=0,INF=(long)1e18;static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));static StreamTokenizer st = new StreamTokenizer(bf);static PrintWriter pw = new PrintWriter(System.out);public static void main(String[]args) throws IOException{int T = 1;//T = Integer.parseInt(S());while(T--0) solve();pw.flush();}static int I() throws IOException{st.nextToken();return (int)st.nval;}static long c1(long a,long b,char op) {if(op=='+') return a+b;if(op=='-') return a-b;if(op=='*') return a*b;return a/b;}static long c2(long a,long b,char op) {if(op=='+') return a-b;if(op=='-') return a+b;if(op=='*') return a/b;return a*b;}    static void solve() throws IOException{String s[] = S().split("=");if(s[1].equals("?")) {long a=0,b=0;char op = ' ';int i=0;for(;ichar c = s[0].charAt(i);if(cchar c = s[0].charAt(i);b = b*10+(int)(c-'0');}pw.println(c1(a,b,op));}else {if(s[0].charAt(0)=='?') {long a=Long.parseLong(s[1]),b=0;char op = ' ';int i=1;op = s[0].charAt(i++);for(;ichar c = s[0].charAt(i);b = b*10+(int)(c-'0');}pw.println(c2(a,b,op));}else {long a=0,b=0;char op = ' ';int i=0;for(;ichar c = s[0].charAt(i);if(cfor(;ichar c = s[0].charAt(i);b = b*10+(int)(c-'0');}long c = Long.parseLong(s[1]);if(a+b==c) pw.println("+");if(a*b==c) pw.println("*");if(a/b==c) pw.println("/");if(a-b==c) pw.println("-");}else {b=Long.parseLong(s[1]);pw.println(c1(a,b,op));}}}}}p1​,p2​,...,pn​},小明进攻所需的能量为                                    E                         =                                   ∑                                       i                               =                               2                                      n                                  d                         (                                   p                                       i                               −                               1                                            ,                                   p                            i                                  )                         ∗                                   w                            i                                       E=\sum_{i=2}^n d(p_{i-1},p_i)*w_i                  E=∑i=2n​d(pi−1​,pi​)∗wi​,其中                                    d                         (                                   p                                       i                               −                               1                                            ,                                   p                            i                                  )                              d(p_{i-1},p_i)                  d(pi−1​,pi​) 表示                                              p                                       i                               −                               1                                            ,                                   p                            i                                       p_{i-1},p_i                  pi−1​,pi​ 两颗星球之间的直线距离。小明想知道进攻所需的最少能量是多少。    static int maxn = 200005,n,m,inf=(int)2e9;    static long INF = (long)2e18,ans = 0,mod = (int)1e9+7;    static Scanner sc = new Scanner (System.in);    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));    static StreamTokenizer st  =new StreamTokenizer(bf);    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));    public static void main(String[]args) throws IOException{        int T = 1;        while(T--0) solve();        pw.flush();    }    static final int I() throws IOException {        st.nextToken();        return (int)st.nval;    }        static long[]w=new long[20];    static int []x = new int [20],y=new int [20],z=new int[20];    static double as=INF;    static double dis(int i,int j) {    if(i==0) return 0;    return Math.sqrt(Math.pow(x[i]-x[j], 2)+Math.pow(y[i]-y[j], 2)+Math.pow(z[i]-z[j], 2))*w[j];    }        static void solve() throws IOException{    n = I();    for(int i=1;i    x[i]=I();y[i]=I();z[i]=I();    }    m = 1    for(int i=0;i    dp[i][j] = INF;    if((j(i-1))%2==1) continue; //集合有 i,跳过    for(int k=1;k    if((j(k-1))%2==0) continue;    if(dp[i][j]  dis(i,k) + dp[k][j^(1b1​=d,b2​=2d,...,bn​=nd}。1,2,3,4},                                             S                            1                                  =                         3                              S_1=3                  S1​=3。2,4,6,8},                                             S                            2                                  =                         4                              S_2=4                  S2​=4。3,6,9,12},                                             S                            3                                  =                         3                              S_3=3                  S3​=3。4,8,12,16},                                             S                            4                                  =                         4                              S_4=4                  S4​=4。    static int maxn = 200005,n,m,inf=(int)2e9;    static long INF = (long)2e18,ans = 0,mod = (int)1e9+7;    static Scanner sc = new Scanner (System.in);    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));    static StreamTokenizer st  =new StreamTokenizer(bf);    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));    public static void main(String[]args) throws IOException{        int T = 1;        //T = I();        while(T--0) solve();        pw.flush();    }    static final int I() throws IOException {        st.nextToken();        return (int)st.nval;    }        static int gcd(int a,int b) {    if(b==0) return a;    return gcd(b,a%b);    }        static long lcm(int a,int b) {    return 1L*a*b/gcd(a,b);    }        static void solve() throws IOException{    n = I();    for(int i=1;i    int a=I();    long x = lcm(a,i);    ans += (1L*n*i)/x;    }    pw.println(ans);}}    static int maxn = 200005,n,m,inf=(int)2e9;    static long INF = (long)2e18,ans = 0,mod = (int)1e9+7;    static Scanner sc = new Scanner (System.in);    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));    static StreamTokenizer st  =new StreamTokenizer(bf);    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));    public static void main(String[]args) throws IOException{        int T = 1;        while(T--0) solve();        pw.flush();    }    static final int I() throws IOException {        st.nextToken();        return (int)st.nval;    }        static class edge{    int u,v,w;    public edge(int a,int b,int c) {    u=a;v=b;w=c;    }    }        static int p[] = new int [maxn];    static int find(int x) {    if(p[x] == x) return x;    return p[x] = find(p[x]);    }        static Vector    Collections.sort(g,(o1,o2)-o1.w-o2.w);    int cnt=0;    for(edge x:g) {    int a=x.u,b=x.v,w=x.w;    int aa = find(a),bb = find(b);    if(aa!=bb) {    p[aa]=bb;    ans=w;    cnt++;    }    }    if(cnt!=n-1) pw.println(-1); //不连通    else pw.println(ans);    }        static void solve() throws IOException{    n = I();m=I();    while(m--0) {    g.add(new edge(I(),I(),I()));    }    krus();}}    static int maxn = 2000005,n,m,inf=(int)2e9;    static long INF = (long)2e18,ans = 0,mod = (int)1e9+7;    static Scanner sc = new Scanner (System.in);    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));    static StreamTokenizer st  =new StreamTokenizer(bf);    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));    public static void main(String[]args) throws IOException{        int T = 1;        //T = I();        while(T--0) solve();        pw.flush();    }    static final int I() throws IOException {        st.nextToken();        return (int)st.nval;    }        static int a[] = new int [maxn];    static int mi[] = new int [maxn    mi[i] = Math.min(mi[i    if(l==r) {    mx[i]=mi[i]=a[l];return;    }    int mid=(l+r)/2;    build(i    if(ll    if(ll    n = I();m=I();    for(int i=1;i    a[i]=I();    }    build(1,1,n);    long cnt=n-m+1;    double ans=0;    for(int i=1;i+m-1    int j = i+m-1;    ans += query_mx(1,1,n,i,j) - query_mi(1,1,n,i,j);    }    pw.printf("%.2f\n",ans/cnt);}}hli​​,hri​​}⩾k∗min{hli​​,hri​​},则此二叉树为一颗非对称二叉树。其中                                              l                            i                                  ,                                   r                            i                                       l_i,r_i                  li​,ri​ 分别是                                    i                              i                  i 的左儿子和右儿子,                                              h                            x                                       h_x                  hx​ 表示以                                    x                              x                  x 为根的子树高度(如果结点                                    x                              x                  x 不存在视为高度等于                                    0                              0                  0)。hli​​,hri​​}+1]=∑max{hli​​,hri​​}⩾k∗min{hli​​,hri​​}​dp[lcnt​][hli​​]∗dp[rcnt​][hri​​]static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in),65535);static StreamTokenizer st = new StreamTokenizer(bf);static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));static int n,m,maxn=200005,inf = 0x3f3f3f3f;static long ans=0,mod=(int)1e9+7,INF=(long)2e18;public static void main(String[]args) throws IOException{new Task().main();pw.flush();}static int I() throws IOException {st.nextToken();return (int)st.nval;}static class Task{void main()throws IOException{int t=1;//t=I();while(t--0) solve();}long [][]dp = new long[44][44];private void solve() throws IOException {n=I();m=I();dp[1][1]=1;dp[0][0]=1;for(int i=2;ifor(int j=0;jint k=i-j-1;for(int h1=0;h1for(int h2=0;h2int mx = Math.max(h1, h2),mi = Math.min(h1, h2);if(mx 

上一篇:GO GMP

下一篇:服务器怎么快速raid?