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 |
谁能解释这个问题?up = (up<<(sub_col-1)) -1;改成:up = (1 <<(sub_col-1)) -1;就超时,怎么可能?#include<cstdio> using namespace std; int ans; int row,col,num,sub_row,sub_col; char stars[1001][1001]; __int64 standard[1000][1000]; __int64 subst[101][51]; __int64 convert(char *str){ __int64 VAL = 0; for(int j = 0; j < sub_col; j++){ VAL <<= 1; VAL += str[j] == '*' ? 1 : 0 ; } return VAL; } void initial(){ __int64 up = 1,VAL = 0; up = (up<<(sub_col-1)) -1; /////改成:up = (1 <<(sub_col-1)) -1;就超时///怎么可能? for(int i = 0; i < row ; i++){ VAL = 0; for(int j = 0; j < col ; j++){ VAL <<= 1; VAL += stars[i][j] == '*' ? 1: 0; if(j >= sub_col-1){ standard[i][j - sub_col + 1] = VAL; VAL &= up; } } } col = col - sub_col + 1; row = row - sub_row + 1; } void intput(){ for(int i = 0; i < row; i++) scanf("%s",stars[i]); char str[61]; for(int i = 0; i < num; i++){ getchar(); for(int j = 0; j < sub_row; j++){ scanf("%s",str); subst[i][j] = convert(str); } } } void slove(){ ans = 0; int que[100]; int size = num,tmp; for(int i = 0; i < num; i++) que[i] = i; for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ tmp = 0; for(int k = 0; k < size; k++) { int tt = 0; for(tt ; tt < sub_row; tt++) { if(standard[i+tt][j] != subst[que[k]][tt]){ break; } } if(tt >= sub_row){ ans ++; } else que[tmp++] = que[k]; } size = tmp; } } } int main(){ int c_nt = 0; while(scanf("%d %d %d %d %d",&row,&col,&num,&sub_row,&sub_col)){ if(!row&&!col&&!num&&!sub_row&&!sub_col) return 0; intput(); initial(); slove(); printf("Case %d: %d\n",++c_nt, 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