蓝桥杯第八届真题 :油漆面积

点击查看:蓝桥杯历年真题 题解目录

油漆面积

蓝桥杯第八届真题 :油漆面积_第1张图片

蓝桥杯第八届真题 :油漆面积_第2张图片

思路:
1. 这道题用线段树去写,可以得到很大的优化
2. 将面积分成相应的小方格,去计数,也能得到结果
3. 用小方格计数时,将存储油漆的区域用 boolean 类型记录,否则会超内存
4. 无论用普通解法(我试了n种),还是线段树树解法,还是C++ 解法,
    包括官网给的代码,"都不能通过第一个样例。(我已向蓝桥官网反馈)"
    我怀疑是:系统数据上传错误。
5. 下文提供 2段代码,系统规定 用时 < 2000 ms ,内存 < 256 MB
    第一段代码,在数组大小和空间上进行了优化, 用时 359ms  内存 143.7 MB
    第二段代码,直接暴力在数组类型为Boolean在空间上进行了优化,用时 1.046ms,内存 157.4MB

蓝桥杯第八届真题 :油漆面积_第3张图片
蓝桥杯第八届真题 :油漆面积_第4张图片

package java_A_2017;
import java.util.Scanner;
public class Main010_油漆面积 {
   public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int n =in.nextInt();
      int max = Integer.MIN_VALUE;
      int min = Integer.MAX_VALUE;
      int[][]a = new int[n][4];
      for(int i=0;i<n;i++) {
         for(int j=0;j<4;j++) {
            a[i][j]=in.nextInt();
            if(a[i][j]>max) max=a[i][j];
            if(a[i][j]<min) min=a[i][j];
         }
      }
      int [][]t = new int[max-min+1][max-min+1]; 
      for(int i=0;i<n;i++)
         for(int k1=a[i][0]-min;k1<a[i][2]-min;k1++)
            for(int k2=a[i][1]-min;k2<a[i][3]-min;k2++)
               t[k1][k2]=1;
      long count = 0;
      for(int i=0,m=t.length;i<m;i++)
         for(int j=0,m2=t[0].length;j<m2;j++)
            if(t[i][j]==1) count++;
      System.out.println(count);
   }
}
package java_A_2017;
import java.util.Scanner;
public class Main010_油漆面积2 {
   public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int n =in.nextInt();
      int[][]a = new int[n][4];
      boolean[][]t = new boolean[10001][10001];
      for(int i=0;i<n;i++) {
         a[i][0]=in.nextInt();
         a[i][1]=in.nextInt();
         a[i][2]=in.nextInt();
         a[i][3]=in.nextInt();
         for(int k=a[i][0];k<a[i][2];k++)
            for(int h=a[i][1];h<a[i][3];h++)
               t[k][h]=true;
      }
      long count=0;
      for(int i=0;i<10000;i++)
         for(int j=0;j<10000;j++) 
            if(t[i][j]==true) count++;
      System.out.println(count);
   }
}

你可能感兴趣的:(蓝桥杯历届真题)