Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
384K,157/172ms(先登错號了2333,果然每次运行时间都是有误差的!)其实挺水的,逆向思维即可,从最后全部分开的时猴开始往前考虑。 布吉岛为啥这么点人AC~附代妈 #include <iostream> #include <stdio.h> using namespace std; int N, M, K, L; int n, m, k; int blocks[9009][20]; int blockNum[9009]; int blockBH[9009]; int rep[9009]; int Abs(int a, int b){ if(a-b >= 0) return a-b; return b-a; } void getNMK(int I){ k = I/(M*N); m = (I%(M*N))/N; n = I%N; } bool isLT(int mon1, int mon2){ for(int i = 0; i < blockNum[mon2]; i++){ int tar = blocks[mon2][i]; getNMK(tar); if(n>0 && blockBH[tar-1]==mon1) return 1; if(n<N-1 && blockBH[tar+1]==mon1) return 1; if(m>0 && blockBH[tar-N]==mon1) return 1; if(m<M-1 && blockBH[tar+N]==mon1) return 1; if(k>0 && blockBH[tar-M*N]==mon1) return 1; if(k<K-1 && blockBH[tar+M*N]==mon1) return 1; } return 0; } int getRep(int r){ int tmp[9009]; int cnt = 0; while(rep[r] != r){ tmp[cnt] = r; cnt++; r = rep[r]; } for(int i = 0; i < cnt; i++){ rep[tmp[i]] = r; } return r; } int main() { int T; scanf("%d", &T); for(int ii = 0; ii < T; ii++){ scanf("%d%d%d%d", &N, &M, &K, &L); for(int i = L-1; i >= 0; i--){ scanf("%d", &blockNum[i]); for(int j = 0; j < blockNum[i]; j++){ scanf("%d", &blocks[i][j]); blockBH[blocks[i][j]] = i; } } if(L <= 2){ printf("0\n"); continue; } int ans = 0; int ltfzgs = 1; rep[0] = 0; for(int i = 1; i < L-1; i++){ int ltgs = 0; bool lt[9009] = {0}; int ltList[9009]; for(int j = 0; j < i; j++){ int repj = getRep(j); if(lt[repj]) continue; if(isLT(i,j)) { lt[repj] = 1; ltList[ltgs] = repj; ltgs++; } } if(ltgs == 0){ rep[i] = i; ltfzgs++; } else{ rep[i] = ltList[0]; for(int j = 1; j < ltgs; j++) rep[ltList[j]] = ltList[0]; ltfzgs -= (ltgs-1); } if(ltfzgs > 1){ ans++; } } printf("%d\n", ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator