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 |
这么个水题de了好久的bug,就一个continue写成了break。。。暴力+剪枝,32ms#include <iostream> #include <cstring> #include <stdio.h> #include <stdlib.h> #include <cmath> #include <algorithm> using namespace std; int prm[24][4] = {{0,1,2,3},{0,1,3,2},{0,2,1,3},{0,2,3,1},{0,3,1,2},{0,3,2,1}, {1,0,2,3},{1,0,3,2},{1,2,0,3},{1,2,3,0},{1,3,0,2},{1,3,2,0}, {2,0,1,3},{2,0,3,1},{2,1,0,3},{2,1,3,0},{2,3,0,1},{2,3,1,0}, {3,0,1,2},{3,0,2,1},{3,1,0,2},{3,1,2,0},{3,2,0,1},{3,2,1,0}}; int main() { char mlc[4][15]; while(1){ scanf("%s", mlc[0]); if(strlen(mlc[0]) < 12) break; scanf("%s%s%s",mlc[1],mlc[2],mlc[3]); int mj = 0; for(int pl = 0; pl < 24; pl++){ if(mj == 64) break; char *s0 = mlc[prm[pl][0]], *s1 = mlc[prm[pl][1]], *s2 = mlc[prm[pl][2]], *s3 = mlc[prm[pl][3]]; //printf("pl=%d\n", pl); //printf("%s %s %s %s\n", s0, s1, s2, s3); for(int i = 1; i <= 8; i++){ if((9-i)*8<=mj) break; for(int j = 10; j >= i+2; j--){ if((j-i-1)*8<=mj) break; for(int k = 1; k <= 10-(j-i); k++){ char c1 = s0[i], c2 = s1[k], c3 = s0[j], c4 = s1[k+j-i]; //printf("%d %d %d %c%c%c%c\n", i,j,k,c1,c2,c3,c4); for(int jg = 9; jg >= 2; jg--){ if((j-i-1)*(jg-1)<=mj) break; //printf("jg=%d\n",jg); bool k2 = 0; for(int s = 1; s <= 10-jg; s++){ if(s2[s]==c1 && s2[s+jg]==c2){ k2 = 1; break; } } if(!k2)continue; for(int t = 1; t <= 10-jg; t++){ if(s3[t]==c3 && s3[t+jg]==c4){ int nmj = (j-i-1)*(jg-1); if(nmj>mj)mj=nmj; break; } } } } } } } printf("%d\n",mj); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator