Untitled
unknown
plain_text
2 years ago
5.4 kB
11
Indexable
//Quang Cao package adver; import java.util.Scanner; public class test { static int N; static int[][] QC=new int[4][2]; static int[][] QC_time=new int[4][2]; static int[] checkQC=new int[4]; static int[][] time=new int[52][2]; static int[] timesetup=new int[52]; static int[] point_person=new int[52]; static int min_time=0; static int max_time=0; static int ans=0; static int check,check1; static int Score() { int point=0; for(int i=1;i<=N;i++) { for(int j=1;j<=3;j++) { if(time[i][0]<=QC_time[j][0] && time[i][1]>=QC_time[j][1]) { if(QC[j][1]>point_person[i]) { point_person[i]=QC[j][1]; } } } point+=point_person[i]; point_person[i]=0; } return point; } static void backtrack(int step,int k) { if(step==3) { if(Score()>ans) { ans=Score(); } return; } if(checkQC[k]==0) { checkQC[k]=1; for(int i=min_time;i<=max_time-QC[k][0];i++) { check=0; check1=0; for(int j=i;j<i+QC[k][0];j++) { if(timesetup[j]!=0) { check=1; break; } } if(i==max_time-QC[k][0] && check==1) check1=1; if(check==1) continue; for(int j=i;j<i+QC[k][0];j++ ) { timesetup[j]=k; } QC_time[k][0]=i; QC_time[k][1]=i+QC[k][0]; backtrack(step+1, k+1); for(int j=i;j<i+QC[k][0];j++ ) { timesetup[j]=0; } QC_time[k][0]=0; QC_time[k][1]=0; } if(check1==1) { backtrack(step+1, k+1); } checkQC[k]=0; } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int T=sc.nextInt(); for(int tc=1;tc<=T;tc++) { N=sc.nextInt(); for(int i=1;i<=3;i++) { QC[i][0]=sc.nextInt(); } for(int i=1;i<=3;i++) { QC[i][1]=sc.nextInt(); } max_time=0; min_time=10000; for(int i=1;i<=N;i++) { time[i][0]=sc.nextInt(); int tmp=sc.nextInt(); time[i][1]=time[i][0]+tmp; if(time[i][1]>max_time) max_time=time[i][1]; if(time[i][0]<min_time) min_time=time[i][0]; } ans=0; backtrack(0, 1); System.out.println("Case #"+tc); System.out.println(ans); } } } //Thong tri khu vuc package ThongTriKhuVuc; import java.util.Scanner; class MyQueue{ private int size; private int[] array; private int in; private int out; public MyQueue(int size) { this.size = size; array=new int[size]; in=-1; out=-1; } public void push(int x) { in++; array[in]=x; } public int pop() { out++; return array[out]; } public boolean isEmpty() { if(in==out) { return true; } return false; } public void reset() { in=out=-1; } } public class test { static int N; static int[][] map=new int[100][100]; static int[][] vs=new int[100][100]; static int[] soLan=new int[6]; static MyQueue queueX=new MyQueue(10000); static MyQueue queueY=new MyQueue(10000); static MyQueue queueX1=new MyQueue(10000); static MyQueue queueY1=new MyQueue(10000); static int[] dx= {0,-1,0,1}; static int[] dy= {-1,0,1,0}; static int count=0; //reset solan static void RSsolan() { for(int i=0;i<=5;i++) { soLan[i]=0; } } //reset visit static void RSvisit() { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { vs[i][j]=0; } } } //BFS static void BFS_0(int x,int y) { queueX.reset(); queueY.reset(); queueX.push(x); queueY.push(y); vs[x][y]=count; while(!queueX.isEmpty()) { int xx=queueX.pop(); int yy=queueY.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==0 && vs[r][c]==0) { queueX.push(r); queueY.push(c); vs[r][c]=count; } else if(map[r][c]!=0 && vs[r][c]==0) { soLan[map[r][c]]++; BFS_1(r,c); } } } } //BFS_1 static void BFS_1(int x,int y) { queueX1.reset(); queueY1.reset(); queueX1.push(x); queueY1.push(y); vs[x][y]=1; while(!queueX1.isEmpty()) { int xx=queueX1.pop(); int yy=queueY1.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==map[xx][yy]&& vs[r][c]==0) { queueX1.push(r); queueY1.push(c); vs[r][c]=1; soLan[map[r][c]]++; } } } } //BFS Gan static void BFS_Gan(int x,int y,int val) { queueX1.reset(); queueY1.reset(); queueX1.push(x); queueY1.push(y); map[x][y]=val; while(!queueX1.isEmpty()) { int xx=queueX1.pop(); int yy=queueY1.pop(); for(int i=0;i<4;i++) { int r=xx+dx[i]; int c=yy+dy[i]; if(r<0 || r>=N || c<0 || c>=N ) continue; if(map[r][c]==0 && vs[r][c]==count) { queueX1.push(r); queueY1.push(c); map[r][c]=val; } } } } //main public static void main(String[] args) { Scanner sc=new Scanner(System.in); int T=sc.nextInt(); for(int tc=0;tc<T;tc++) { N=sc.nextInt(); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { map[i][j]=sc.nextInt(); } } RSvisit(); count=2; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(map[i][j]==0 && vs[i][j]==0) { RSsolan(); BFS_0(i, j); for(int m=0;m<N;m++) { for(int n=0;n<N;n++) { if(map[m][n]!=0 && vs[m][n]==1) { vs[m][n]=0; } } } int max=0; int tmp=0; for(int m=0;m<=5;m++) { if(soLan[m]>=max) { max=soLan[m]; tmp=m; } } BFS_Gan(i, j, tmp); count++; } } } RSvisit(); int ans=0; for(int m=0;m<N;m++) { for(int n=0;n<N;n++) { if(vs[m][n]==0) { ans++; BFS_1(m, n); } } } System.out.println("Case #"+(tc+1)); System.out.println(ans); } } }
Editor is loading...