CCF-CSP认证202303-1(Java)求问

纯暴力写法:(也没时空条件啊,值也<=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过不了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值