先挂题,有时间就写完
本题总分:5 分
问题描述
用 8 8 8 位二进制(一个字节)来表示一个非负整数,表示的最小值是 0 0 0,则一般能表示的最大值是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
255
calcCode:
public class Test {
public static void main(String[] args) {
System.out.print(0xFF);
}
}
?
本题总分:5 分
问题描述
小蓝家的网络带宽是 200 200 200 Mbps,请问,使用小蓝家的网络理论上每秒钟最多可以从网上下载多少 MB 的内容。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
25
calcCode:
public class Test {
public static void main(String[] args) {
System.out.print(200 >> 3);
}
}
ps 就是 per second,然后 1Mb = 8MB
就我感觉这题出的必被骂
本题总分:10 分
问题描述
如果一个正整数只有 1 1 1 和它本身两个约数,则称为一个质数(又称素数)。
前几个质数是: 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , ⋅ ⋅ ⋅ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, · · · 2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。
如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如: 2 , 3 , 5 , 7 , 23 , 37 2, 3, 5, 7, 23, 37 2,3,5,7,23,37 都是纯质数,而 11 , 13 , 17 , 19 , 29 , 31 11, 13, 17, 19, 29, 31 11,13,17,19,29,31 不是纯质数。当然 1 , 4 , 35 1, 4, 35 1,4,35 也不是纯质数。
请问,在 1 1 1 到 20210605 20210605 20210605 中,有多少个纯质数?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
1903
calcCode:
public class Test {
static final int n = 20210605, helper[] = {
2, 3, 5, 7 };
static boolean[] marked = new boolean[n + 1];
public static void main(String[] args) {
for (int i = 2; i <= n; i++)
if (!marked[i])
for (int j = i << 1; j <= n; j += i)
marked[j] = true;
System.out.println(dfs(0, 0) - 1);
}
static int dfs(int depth, int k) {
if (depth == 8) return (k <= n && !marked[k]) ? 1 : 0;
int ans = marked[k]? 0: 1;
for (int i = 0; i < 4; i++)
ans += dfs(depth + 1, k * 10 + helper[i]);
return ans;
}
}
打表
本题总分:10 分
问题描述
如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如: 2021 2021 2021 年 6 6 6 月 5 5 5 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 16 2 + 0 + 2 + 1 + 6 + 5 = 16 2+0+2+1+6+5=16,而 16 16 16 是一个完全平方数,它是 4 4 4 的平方。所以 2021 2021 2021 年 6 6 6 月 5 5 5 日是一个完全日期。
例如: 2021 2021 2021 年 6 6 6 月 23 23 23 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 2 + 3 = 16 2 + 0 + 2 + 1 + 6 + 2 + 3 = 16 2+0+2+1+6+2+3=16,是一个完全平方数。所以 2021 2021 2021 年 6 6 6 月 23 23 23 日也是一个完全日期。
请问,从 2001 2001 2001 年 1 1 1 月 1 1 1 日到 2021 2021 2021 年 12 12 12 月 31 31 31 日中,一共有多少个完全日期?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
977
calcCode:
import java.time.LocalDate;
public class Test {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2000, 12, 31);
LocalDate end = LocalDate.of(2021, 12, 31);
int ans = 0;
while((start = start.plusDays(1)).compareTo(end) <= 0)
if (check(start.toString())) ans++;
System.out.println(ans);
}
static boolean check(String date) {
int buff = 2;
for (int i = 0; i < 10; i++)
buff += Character.digit(date.charAt(i), 10);
return buff == 3 * 3 || buff == 4 * 4 || buff == 5 * 5;
}
}
最大是 20190929 最小是 20010101 也就是,它们组成的完全平方数在 3 4 5 的平方当中
本来想用 Stream 写的,但真去下手才发现自己的 Stream 学的真不像个东西
本题总分:15 分
问题描述
对于一棵有根二叉树 T T T,小蓝定义这棵树中结点的权值 W ( T ) W(T) W(T) 如下:
空子树的权值为 0 0 0。
如果一个结点 v v v 有左子树 L L L, 右子树 R R R,分别有 C ( L ) C(L) C(L) 和 C ( R ) C(R) C(R) 个结点,则 W ( v ) = 1 + 2 W ( L ) + 3 W ( R ) + ( C ( L ) ) 2 C ( R ) W(v) = 1 + 2W(L) + 3W(R) + (C(L))^{2} C(R) W(v)=1+2W(L)+3W(R)+(C(L))2C(R)。
树的权值定义为树的根结点的权值。
小蓝想知道,对于一棵有 2021 2021 2021 个结点的二叉树,树的权值最小可能是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2653631372
calcCode:
public class Test {
static final int n = 2021;
public static void main(String[] args) {
long dp[] = new long[n + 1];
for (int k = 1; k <= n; k++) {
dp[k] = Long.MAX_VALUE;
for (int i = 0, j = k - 1; j >= 0; i++, j--)
dp[k] = min(dp[k], 1 + 2 * dp[i] + 3 * dp[j] + i * i * j);
}
System.out.println(dp[2021]);
}
static long min(long a, long b) {
return a < b ? a : b; }
}
我没有文化,我只是个大专
但这种可以用简单 dp 解决的还是蛮舒服的
时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分
问题描述
给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。
输入格式
输入一行包含一个字符串。
输出格式
输出转换成大写后的字符串。
测试样例1
Input:
LanQiao
Output:
LANQIAO
评测用例规模与约定
对于所有评测用例,字符串的长度不超过 100 100 100。
code:
public class Main {
public static void main(String[] args) {
System.out.println(new java.util.Scanner(System.in).next().toUpperCase());
}
}
我就纳闷了,一天被这样连骂两次
时间限制: 5.0s 内存限制: 512.0MB 本题总分:20 分
问题描述
小蓝发现了一个有趣的数列,这个数列的前几项如下:
1 , 1 , 2 , 1 , 2 , 3 , 1 , 2 , 3 , 4 , . . . 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, ... 1,1,2,1,2,3,1,2,3,4,...
小蓝发现,这个数列前 1 1 1 项是整数 1 1 1,接下来 2 2 2 项是整数 1 1 1 至 2 2 2,接下来 3 3 3 项是整数 1 1 1 至 3 3 3,接下来 4 4 4 项是整数 1 1 1 至 4 4 4,依次类推。
小蓝想知道,这个数列中,连续一段的和是多少。
输入格式
输入的第一行包含一个整数 T T T,表示询问的个数。
接下来 T T T 行,每行包含一组询问,其中第 i i i 行包含两个整数 l i l_{i} li 和 r i r_{i} ri,表示
询问数列中第 l i l_{i} li 个数到第 r i r_{i} ri 个数的和。
输出格式
输出 T 行,每行包含一个整数表示对应询问的答案。
测试样例1
Input:
3
1 1
1 3
5 8
Output:
1
4
8
评测用例规模与约定
对于 10 10 10% 的评测用例, 1 ≤ T ≤ 30 , 1 ≤ l i ≤ r i ≤ 100 1 ≤ T ≤ 30, 1 ≤ l_{i} ≤ r_{i} ≤ 100 1≤T≤30,1≤li≤ri≤100。
对于 20 20 20% 的评测用例, 1 ≤ T ≤ 100 , 1 ≤ l i ≤ r i ≤ 1000 1 ≤ T ≤ 100, 1 ≤ l_{i} ≤ r_{i} ≤ 1000 1≤T≤100,1≤li≤ri≤1000。
对于 40 40 40% 的评测用例, 1 ≤ T ≤ 1000 , 1 ≤ l i ≤ r i ≤ 1 0 6 1 ≤ T ≤ 1000, 1 ≤ l_{i} ≤ r_{i} ≤ 10^{6} 1≤T≤1000,1≤li≤ri≤106。
对于 70 70 70% 的评测用例, 1 ≤ T ≤ 10000 , 1 ≤ l i ≤ r i ≤ 1 0 9 1 ≤ T ≤ 10000, 1 ≤ l_{i} ≤ r_{i} ≤ 10^{9} 1≤T≤10000,1≤li≤ri≤109。
对于 80 80 80% 的评测用例, 1 ≤ T ≤ 1000 , 1 ≤ l i ≤ r i ≤ 1 0 12 1 ≤ T ≤ 1000, 1 ≤ l_{i} ≤ r_{i} ≤ 10^{12} 1≤T≤1000,1≤li≤ri≤1012。
对于 90 90 90% 的评测用例, 1 ≤ T ≤ 10000 , 1 ≤ l i ≤ r i ≤ 1 0 12 1 ≤ T ≤ 10000, 1 ≤ l_{i} ≤ r_{i} ≤ 10^{12} 1≤T≤10000,1≤li≤ri≤1012。
对于所有评测用例, 1 ≤ T ≤ 100000 , 1 ≤ l i ≤ r i ≤ 1 0 12 1 ≤ T ≤ 100000, 1 ≤ l_{i} ≤ r_{i} ≤ 10^{12} 1≤T≤100000,1≤li≤ri≤1012。
code:
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int n = (int)Math.sqrt(2E12) + 1;
static long[] row = new long[n], col = new long[n];
public static void main(String[] args) {
InputReader in = new InputReader(System.in);
PrintWriter out = new PrintWriter(System.out);
long T = in.nextLong(), buf;
for (int i = 1; i < n; i++) {
row[i] = i + row[i - 1];
col[i] = col[i - 1] + row[i];
}
while (T-- > 0) {
buf = in.nextLong();
out.println(sum(in.nextLong()) - sum(buf - 1));
}
out.flush();
}
static long sum(long r) {
int k = lower_bound(r);
return r == row[k] ? col[k] : col[k - 1] + row[(int)(r - row[k - 1])];
}
static int lower_bound(long k) {
int left = 0, right = n - 1, mid;
while (left < right) {
mid = left + right >> 1;
if (row[mid] >= k) right = mid;
else left = mid + 1;
}
return left;
}
static class InputReader {
BufferedReader read;
StringTokenizer tok;
String delimiters;
InputReader(InputStream in) {
this(in, " \n\t\r\f"); }
InputReader(InputStream in, String delimiters) {
this.read = new BufferedReader(new InputStreamReader(in));
this.delimiters = delimiters;
}
String next() {
while (tok == null || !tok.hasMoreTokens())
try {
tok = new StringTokenizer(read.readLine(), delimiters);
} catch (IOException e) {
e.fillInStackTrace();
}
return tok.nextToken();
}
long nextLong() {
return Long.parseLong(next()); }
}
}
虽然感觉是简单数学
只能说 不会
用了 前缀和+二分+快速输入
只能说 蓝桥来作用了
去年在这的是几乎爆杀所有人的皮亚诺曲线
时间限制: 3.0s 内存限制: 512.0MB 本题总分:20 分
问题描述
小蓝有一个 01 01 01 串 s = s 1 s 2 s 3 ⋅ ⋅ ⋅ s n s = s_{1} s_{2} s_{3} · · · s_{n} s=s1s2s3⋅⋅⋅sn。
以后每个时刻,小蓝要对这个 01 01 01 串进行一次变换。每次变换的规则相同。
对于 01 01 01 串 s = s 1 s 2 s 3 ⋅ ⋅ ⋅ s n s = s_{1} s_{2} s_{3} · · · s_{n} s=s1s2s3⋅⋅⋅sn,变换后的 01 01 01 串 s ′ = s ′ 1 s ′ 2 s ′ 3 ⋅ ⋅ ⋅ s ′ n s′ = s′_{1}s′_{2}s′_{3}· · · s′_{n} s′=s′1s′2s′3⋅⋅⋅s′n 为:
s ′ 1 = s 1 s′_{1} = s_{1} s′1=s1;
s ′ i = s i − 1 ⊕ s i s′_{i} = s_{i−1} ⊕ s_{i} s′i=si−1⊕si。
其中 a ⊕ b a ⊕ b a⊕b 表示两个二进制的异或,当 a a a 和 b b b 相同时结果为 0 0 0,当 a 和 b
不同时结果为 1 1 1。
请问,经过 t t t 次变换后的 01 01 01 串是什么?
输入格式
输入的第一行包含两个整数 n , t n, t n,t,分别表示 01 01 01 串的长度和变换的次数。
第二行包含一个长度为 n n n 的 01 01 01 串。
输出格式
输出一行包含一个 01 01 01 串,为变换后的串。
测试样例1
Input:
5 3
10110
Output:
11010
Explanation:
初始时为 10110,变换 1 次后变为 11101,变换 2 次后变为 10011,变换 3 次后变为 11010。
评测用例规模与约定
对于 40 40 40% 的评测用例, 1 ≤ n ≤ 100 , 1 ≤ t ≤ 1000 1 ≤ n ≤ 100, 1 ≤ t ≤ 1000 1≤n≤100,1≤t≤1000。
对于 80 80 80% 的评测用例, 1 ≤ n ≤ 1000 , 1 ≤ t ≤ 1 0 9 1 ≤ n ≤ 1000, 1 ≤ t ≤ 10^{9} 1≤n≤1000,1≤t≤109。
对于所有评测用例, 1 ≤ n ≤ 10000 , 1 ≤ t ≤ 1 0 18 1 ≤ n ≤ 10000, 1 ≤ t ≤ 10^{18} 1≤n≤10000,1≤t≤1018。
code:
// 没啥思路,暴力骗分不想写
时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分
问题描述
一片海域上有一些冰山,第 i i i 座冰山的体积为 V i V_{i} Vi。
随着气温的变化,冰山的体积可能增大或缩小。第 i i i 天,每座冰山的变化量都是 X i X_{i} Xi。当 X i > 0 X_{i} > 0 Xi>0 时,所有冰山体积增加 X i X_{i} Xi;当 X i < 0 X_{i} < 0 Xi<0 时,所有冰山体积减少 − X i −X_{i} −Xi;当 X i = 0 X_{i} = 0 Xi=0 时,所有冰山体积不变。
如果第 i i i 天某座冰山的体积变化后小于等于 0 0 0,则冰山会永远消失。
冰山有大小限制 k k k。如果第 i i i 天某座冰山 j j j 的体积变化后 V j V_{j} Vj 大于 k k k,则它会分裂成一个体积为 k k k 的冰山和 V j − k V_{j} − k Vj−k 座体积为 1 1 1 的冰山。
第 i i i 天结束前(冰山增大、缩小、消失、分裂完成后),会漂来一座体积为 Y i Y_{i} Yi 的冰山( Y i = 0 Y_{i} = 0 Yi=0 表示没有冰山漂来)。
小蓝在连续的 m m m 天对这片海域进行了观察,并准确记录了冰山的变化。小蓝想知道,每天结束时所有冰山的体积之和(包括新漂来的)是多少。
由于答案可能很大,请输出答案除以 998244353 998244353 998244353 的余数。
输入格式
输入的第一行包含三个整数 n , m , k n, m, k n,m,k,分别表示初始时冰山的数量、观察的天数以及冰山的大小限制。
第二行包含 n n n 个整数 V 1 , V 2 , ⋅ ⋅ ⋅ , V n V_{1}, V_{2}, · · · , V_{n} V1,V2,⋅⋅⋅,Vn,表示初始时每座冰山的体积。
接下来 m m m 行描述观察的 m m m 天的冰山变化。其中第 i i i 行包含两个整数 X i , Y i X_{i}, Y_{i} Xi,Yi,意义如前所述。
输出格式
输出 m m m 行,每行包含一个整数,分别对应每天结束时所有冰山的体积之和除以 998244353 998244353 998244353 的余数。
测试样例1
Input:
1 3 6
1
6 1
2 2
-1 1
Output:
8
16
11
Explanation:
在本样例说明中,用 [a1, a2, · · · , an] 来表示每座冰山的体积。
初始时的冰山为 [1]。
第 1 天结束时,有 3 座冰山:[1, 1, 6]。
第 2 天结束时,有 6 座冰山:[1, 1, 2, 3, 3, 6]。
第 3 天结束时,有 5 座冰山:[1, 1, 2, 2, 5]。
评测用例规模与约定
对于 40 40 40% 的评测用例, n , m , k ≤ 2000 n, m, k ≤ 2000 n,m,k≤2000;
对于 60 60 60% 的评测用例, n , m , k ≤ 20000 n, m, k ≤ 20000 n,m,k≤20000;
对于所有评测用例, 1 ≤ n , m ≤ 100000 , 1 ≤ k ≤ 1 0 9 , 1 ≤ V i ≤ k , 0 ≤ Y i ≤ k , − k ≤ X i ≤ k 1 ≤ n, m ≤ 100000, 1 ≤ k ≤ 10^{9}, 1 ≤ V_{i} ≤ k, 0 ≤ Y_{i} ≤ k,−k ≤ X_{i} ≤ k 1≤n,m≤100000,1≤k≤109,1≤Vi≤k,0≤Yi≤k,−k≤Xi≤k。
code:
// 5s, 写个大模拟就够了,不想写
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
问题描述
小蓝最近在学习二进制。他想知道 1 1 1 到 N N N 中有多少个数满足其二进制表示中恰好有 K K K 个 1 1 1。你能帮助他吗?
输入格式
输入一行包含两个整数 N N N 和 K K K。
输出格式
输出一个整数表示答案。
测试样例1
Input:
7 2
Output:
3
评测用例规模与约定
对于 30% 的评测用例, 1 ≤ N ≤ 1 0 6 , 1 ≤ K ≤ 10 1 ≤ N ≤ 10^{6}, 1 ≤ K ≤ 10 1≤N≤106,1≤K≤10。
对于 60% 的评测用例, 1 ≤ N ≤ 2 × 1 0 9 , 1 ≤ K ≤ 30 1 ≤ N ≤ 2 × 10^{9}, 1 ≤ K ≤ 30 1≤N≤2×109,1≤K≤30。
对于所有评测用例, 1 ≤ N ≤ 1 0 18 , 1 ≤ K ≤ 50 1 ≤ N ≤ 10^{18}, 1 ≤ K ≤ 50 1≤N≤1018,1≤K≤50。
code:
import java.util.Scanner;
public class Main {
static int[][] dp = new int[65][65];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n = in.nextLong(), ans = 0;
int k = in.nextInt();
dp[0][0] = 1;
for (int i = 1; i <= 64; i++)
for (int j = 1; j <= 64; j++)
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
for (int i = 63; i >= 0; i--) {
if ((n >> i & 1) == 1) ans += dp[i + 1][k-- + 1];
if (k == 0) {
ans++; break; }
}
System.out.println(ans);
}
}
n = 13 k = 2
toBinary(n) = 0b1101
设我们需要完成函数 f(n, k) 举例:
f(0b1101, 2) = f(0b111, 2) + (f(0b101, 1) = …)
f(0b0111, 2) = { 2 2 , 2 1 , 2 0 } \{ 2^{2}, 2^{1}, 2^{0} \} { 22,21,20} 中 选择 K = 2 个元素所能组成的子集个数
简单数学