Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

TLE,求求大家了,我真的真的不知道怎么办了,看看吧,跪谢,

Posted by 2209080118 at 2010-07-12 14:47:15 on Problem 2965 and last updated at 2010-07-12 21:02:01
谁能帮我看看呀,不知道怎么优化一下,非常谢谢
#include<iostream>
#include<stdio.h>
using namespace std;
#define N 70000
bool flag[70000];
struct State{
int st;
int step;
};
int b[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
void move(int r,State &t){
     int i=r/4,j=r%4;
     t.st^=b[15-r];
     int n=r-4;
     int k=i-1;
     while(k>=0){
     t.st^=b[15-n];
     k--;
     n-=4;
     }
     k=i+1;
     n=r+4;
     while(k<4){
     t.st^=b[15-n];
     k++;
     n=n+4;    
     }
     k=j-1;
     n=r-1;
     while(k>=0){
     t.st^=b[15-n];
     k--,n--;    
     }
     k=j+1;n=r+1;
     while(k<4){
      t.st^=b[15-n];
      k++,n++;                                
}
   }
void BFS(State s,string ste){
    State q[N];
    string q1[N];
    int front=0,rear=0;
    q[rear]=s;
    q1[rear++]=ste;
    while(front!=rear){
       State temp=q[front];
       string temp1=q1[front++];
       for(int i=0;i<16;i++){
       State t=temp;
       string s1=temp1;
       int k;
       k=i/4;
       s1.append(1,k);
       k=i%4;
       s1.append(1,k);
       move(i,t);
       if(t.st==0){
       printf("%d\n",t.step+1);
       int len=s1.length();
       for(int i=0;i<len;i=i+2)
       printf("%d %d\n",s1[i]+1,s1[i+1]+1); 
       return;                         
       }
       if(flag[t.st]==0){
        flag[t.st]=true;
        t.step++;
        q[rear]=t;
        q1[rear++]=s1;                 
        }
 }               
                      
                      
   }
     
}
int main(){
char map[17];
string ste;
int i,j;
State s;
s.st=0;s.step=0;
scanf("%s%s%s%s",map,map+4,map+8,map+12);
for(i=0;i<16;i++)
 {
  if(map[i]=='+')
  s.st++;
  s.st<<=1;                 
  }
s.st>>=1;
flag[s.st]=true;
if(s.st==0)
printf("0\n");
else
BFS(s,ste);
return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator