

纯暴力写法:(也没时空条件啊,值也<=10E4,没超 int 范围)
第一种算法(占点法)
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int n,a,b;
n=sc.nextInt();
a=sc.nextInt();
b=sc.nextInt();
int[][] map = new int[a+9][b+9];
for(int i=0;i<a+9;i++){
for(int j=0;j<b+9;j++){
map[i][j]=0;
}
}
//输入坐标
for(int i =0;i<n;i++){
int x1,y1,x2,y2;
x1=sc.nextInt();
y1=sc.nextInt();
x2=sc.nextInt();
y2=sc.nextInt();
int X1=0,Y1=0,X2=0,Y2=0;
// System.out.printf("x1 %d y1 %d x2 %d y2 %d\n",x1,y1,x2,y2);
X1=Math.max(0,x1);
Y1=Math.max(0,y1);
X2=Math.min(a,x2);
Y2=Math.min(b,y2);
// System.out.printf("X1=%d Y1=%d X2=%d Y2=%d\n",X1,Y1,X2,Y2);
for(int x=X1;x<=X2;x++){
for(int y=Y1;y<=Y2;y++){
map[x][y]=1;
}
}
}
long sum=0;
for(int x=0;x<=a+1;x++){
for(int y=0;y<=b+1;y++){
if(map[x][y]==1 && map[x+1][y]==1 && map[x][y+1]==1 && map[x+1][y+1]==1){
sum++;
}
}
}
System.out.println(sum);
}
}
样例过了,而csp只过40:
第二种:(公式法,取巧的方法,因为只有边界相邻)
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int n,a,b;
n=sc.nextInt();
a=sc.nextInt();
b=sc.nextInt();
int[][] map = new int[a+9][b+9];
for(int i=0;i<a+9;i++){
for(int j=0;j<b+9;j++){
map[i][j]=0;
}
}
long sum=0;
//输入坐标
for(int i =0;i<n;i++){
int x1,y1,x2,y2;
x1=sc.nextInt();
y1=sc.nextInt();
x2=sc.nextInt();
y2=sc.nextInt();
int X1=0,Y1=0,X2=0,Y2=0;
// System.out.printf("x1 %d y1 %d x2 %d y2 %d\n",x1,y1,x2,y2);
X1=Math.max(0,x1);
Y1=Math.max(0,y1);
X2=Math.min(a,x2);
Y2=Math.min(b,y2);
// System.out.printf("X1=%d Y1=%d X2=%d Y2=%d\n",X1,Y1,X2,Y2);
sum+=(X2-X1)*(Y2-Y1);
}
System.out.println(sum);
}
}
这个方法样例过,而csp过0。
csp为什么啊,难道Java写算法就这么难,感觉还是力扣更符合心意啊,说实话,我不理解,为什么同样算法,C++我可以过,Java过不了
32万+

被折叠的 条评论
为什么被折叠?



