我在写这道题的时候P1816忠诚,java代码所有数据点都没过,我就下载了测试数据点1的in,和out文件,用我自己的电脑跑出来答案就是一模一样的,不知道为什么第一个测试点都wr了。
代码如下
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
//Reader是java的快读模版
static class Reader {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
public static String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(br.readLine());
}
return tokenizer.nextToken();
}
public static int nextInt() throws IOException {
return Integer.parseInt(next());
}
public static long nextLong() throws IOException {
return Long.parseLong(next());
}
public static Double nextDouble() throws IOException {
return Double.parseDouble(next());
}
}
//这题使用动态规划+倍增,dp[][]就是动态规划的数组
public static int[][]dp=new int[100005][20];
//log是以2为底,先下取整的值(此处是先把所有的值求出来,避免重复调用log库)
public static int[]log=new int[100005];
public static void initial(){
log[1]=0;
log[2]=0;
log[3]=1;
for (int i=3;i<100005;i++){
log[i]=log[i/2]+1;
}
}
public static void solve()throws IOException{
int m=Reader.nextInt(),n=Reader.nextInt();
for(int i=1;i<=m;i++)dp[i][0]=Reader.nextInt();
for(int j=1;j<20;j++){
for (int i=1;i+(1<<j)-1<=m;i++){
dp[i][j]=Math.min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}
}
for(int k=1;k<=n;k++) {
int s = Reader.nextInt(), e = Reader.nextInt(), t = log[e - s + 1];
int ans=Math.min(dp[s][t], dp[e - (1 << t) + 1][t]);
//该语句是输出到控制台的
System.out.printf("%d ",ans);
}
Reader.br.close();
//fileWriter.close();
}
public static void main(String args[]) throws Exception {
initial();
solve();
}
}
这道题我是不会写的,看的是OiWiki网站上的代码,改成了java语言 原地址
各位友友能不能帮我看看为什么,我查了一些资料说是洛谷评测机器是Linux和windows的换行符的关系导致输入缺失什么的。因为看不到到底洛谷输出了什么,哎。
真的非常难受哇(>..<)