秋季赛题目:http://vj.saikr.com/contest/16/problems
【参考:第三届全国大学生算法设计与编程挑战赛题解【金奖全国第九】_米莱虾的博客-CSDN博客】
【参考:2021-2022第三届全国大学生算法设计与编程挑战赛(秋季赛) 题解_ReChn0的博客-CSDN博客】
B: 二进制
线段树 不会,待定
F:CTF
2^1 2^2 2^3
1 1 2 2 2 2 3 3 3 3 3 3 3 3
2 4 8
算前面n个数之和
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int i = 0;
int p = 1;
int result = 0;
// 一个一个加起来
while (true) {
int temp = (int) Math.pow(2, p);
while (temp > 0) {
result += p;
temp--;
i++;
if (i == n) break; // 加前面n个数
}
if (i == n) break;
p++;
}
System.out.println(result);
}
}
J:抽奖
【参考:SaikrVj | 抽奖】
首先求出x颗原石的抽奖次数,并得到相应的星辉。然后循环使用星辉抽奖,扣除相应的星辉并添加得到的星辉,直到星辉数目不够抽奖为止。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt(); // 原石
int z = x / 160;
int y = z / 10 * 3; // 星辉数
int sum = z;
while (y >= 5) {
int temp = sum; // 上一次的抽奖次数
sum += y / 5; // 每5个星辉抽一发
y %= 5; // 上面抽完余下的星辉数(还未加上这次抽奖获得的)
y += (sum / 10 - temp / 10) * 3; // 每满10发获得3给星辉
}
System.out.println(sum);
}
}