百度-裁减网格纸
题目描述
度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
输入描述:
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点
输出描述:
一行输出最小面积
输入例子:
2
0 0
0 3
输出例子:
9
解题思路:比较简单的一道题,根据测试用例,只需要判断两点之间水平/垂直方向的最大距离,即求最大最小x和y。然后比较出最大距离求平方,然后需要注意,当只有一个点的时候实际上面积是1,而不是0。
import java.util.*;
public class Main{
public static void main(String []args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
String line=scan.nextLine();
int n=Integer.parseInt(line.trim());
int xmin=0;
int xmax=0;
int ymin=0;
int ymax=0;
for(int i=0;i<n;i++){
line=scan.nextLine();
String []lines=line.trim().split(" ");
int tmp=Integer.parseInt(lines[0]);
xmin=tmp<xmin?tmp:xmin;
xmax=tmp>xmax?tmp:xmax;
tmp=Integer.parseInt(lines[1]);
ymin=tmp<ymin?tmp:ymin;
ymax=tmp>ymax?tmp:ymax;
}
int max=(xmax-xmin)>(ymax-ymin)?xmax-xmin:ymax-ymin;
if(max==0&&n!=0){
System.out.println(1);
}else{
System.out.println(max*max);
}
}
}
}
做了2天题目之后,对这个输入输出还算比较熟悉了~!。
百度-罪犯转移
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
输入描述:
第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai≤1e9)
输出描述:
一行输出答案。
输入例子:
3 100 2
1 2 3
输出例子:
2
解题思路:类似计算流的方式吧?就是不回头的计算,避免重复工作。在计算c个罪行值和之后,每次减去第一个,增加后一个,满足条件就counter++。更好的应该是判断完当前情况减去最老的一个,然后读新数据时候再增加进行判断,这时候保持只有C个罪犯在内存中。
import java.util.*;
public class Main{
public static void main(String []args) throws Exception{
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
String line=scan.nextLine();
String[] lines=line.trim().split(" ");
int n=Integer.parseInt(lines[0]);
int t=Integer.parseInt(lines[1]);
int c=Integer.parseInt(lines[2]);
int []crm=new int[n];
line=scan.nextLine();
lines=line.trim().split(" ");
for(int i=0;i<n;i++){
crm[i]=Integer.parseInt(lines[i]);
}
int sum=0;
int counter=0;
for(int i=0;i<c;i++){
sum+=crm[i];
}
if(sum<=t){
counter++;
}
for(int i=c;i<n;i++){
sum-=crm[i-c];
sum+=crm[i];
if(sum<=t){
counter++;
}
}
System.out.println(counter);
}
}
}
感觉不错~今天30分钟就做完2个题目~加油!