目录
A:数列求值
类似于斐波那契数列,每一次记得取模就行
import java.io.*;
/**
* @ClassName 第一天3月4日
* @Description TODO
* @Author 小怂很怂
* @Date 2023/3/3 21:01
* @Version 1.0
**/
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws Exception {
int []arr=new int[20190324];
arr[0]=1;arr[1]=1;arr[2]=1;
for (int i=3;i<20190324;i++){
arr[i]=(arr[i-1]+arr[i-2]+arr[i-3])%10000;
}
pw.println(arr[20190323]);
pw.flush();
}
public static int nextInt() throws Exception {//int型
st.nextToken();
return (int) st.nval;
}
public static long nextLong() throws Exception {//long型
st.nextToken();
return (long) st.nval;
}
}
B:质数
用的傻方法,不会筛
import java.io.*;
/**
* @ClassName 质数
* @Description TODO
* @Author 小怂很怂
* @Date 2023/3/3 21:07
* @Version 1.0
**/
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws Exception {
int sum=3;
for (int i=6;i<10000000;i++){
int t= (int) Math.sqrt(i);
for (int j=2;j<=t;j++){
if (i%j==0){
break;
}else if (j==t){
sum+=1;
}
}
if (sum==2019) {
pw.println(i);
break;
}
}
pw.flush();
}
public static int nextInt() throws Exception {//int型
st.nextToken();
return (int) st.nval;
}
public static long nextLong() throws Exception {//long型
st.nextToken();
return (long) st.nval;
}
}
C:饮料换购
用while去进行判断是否还能够继续凑够一瓶即可
import java.io.*;
/**
* @ClassName 饮料换购
* @Description TODO
* @Author 小怂很怂
* @Date 2023/3/3 21:17
* @Version 1.0
**/
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws Exception {
int n=nextInt();
int count=n;
while (n>=3){
count+=(n/3);
n=(n%3)+(n/3);
}
pw.println(count);
pw.flush();
}
public static int nextInt() throws Exception {//int型
st.nextToken();
return (int) st.nval;
}
public static long nextLong() throws Exception {//long型
st.nextToken();
return (long) st.nval;
}
}
D:巧克力
贪心思路吧,优先选择价值小的,价值相同的情况下选择过期时间短的,因为我们可先选择后吃,所以我们只需要选择出来即可,所以每一次选择的都是优先价值最小的,即可满足花费最小,做题的时候学了一下TreeSet,不会的朋友可以去学一下,挺好使(学完以后可能会比较好理解,刚学我也讲不清楚,阿巴阿巴)
import java.io.*;
import java.util.Arrays;
import java.util.TreeSet;
/**
* @ClassName 巧克力
* @Description TODO
* @Author 小怂很怂
* @Date 2023/3/3 21:27
* @Version 1.0
**/
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
public static TreeSet<Integer> tr= new TreeSet<>();
public static void main(String[] args) throws Exception {
int x=nextInt();
int n=nextInt();
int [][]arr=new int[n][3];
for (int i=0;i<n;i++){
arr[i][0]=nextInt();arr[i][1]=nextInt();arr[i][2]=nextInt();
}
Arrays.sort(arr,((a,b)-> {
if(a[0]==b[0]) {
return a[1]-b[1];
}
return a[0] - b[0];
}));
for (int i=1;i<=x;i++) tr.add(i);
int k=0;
long s=0;
while (tr.size()!=0&&k<n){
while (arr[k][2] != 0&&tr.size()!=0&&tr.first()<=arr[k][1]){
s+=arr[k][0];
arr[k][2]--;
tr.remove(tr.lower(arr[k][1]+1));
}
k++;
}
pw.println(tr.size()!=0?-1:s);
pw.flush();//必须加
}
public static int nextInt() throws Exception {//int型
st.nextToken();
return (int) st.nval;
}
public static long nextLong() throws Exception {//long型
st.nextToken();
return (long) st.nval;
}
}