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

我用同样的数学模型写的程序,pascal的过,c++的却TLE,为什么?

Posted by fatboy at 2005-04-03 00:35:16 on Problem 2167
#include <math.h>
#include <iostream>
using namespace std;
int m,n;
int prnum[39];
int nonum[39]; 
int testnum[39];
int pp1[39];
int pp2[39];
int ans[100002];
int cal;
int prpoi;
int main()
{
    while(cin>>n>>m)
    {
     prpoi=0;
     ans[0]=0;
     int temp=m;
     bool isprime=true;
     for(int i=2;i<=(m+1)/2;i++)
      if(temp%i==0)
     {int cou=0;isprime=false;
      while(temp%i==0){temp/=i;cou++;}
      prpoi++;
      prnum[prpoi]=i;
      nonum[prpoi]=cou;
      if(temp==1)break;
     } 
     if(isprime)
     {prpoi++;
      prnum[prpoi]=m;
      nonum[prpoi]=1;
     }
/*     
     for(int i=1;i<=prpoi;i++)
     cout<<prnum[i]<<" "<<nonum[i]<<endl;
     cout<<endl;
*/          
     int p1=n-1;
     int p2=1;      
     
          
     for(int i=1;i<=prpoi;i++)testnum[i]=0;  
     
     for(int j=2;j<=(n+1)/2;j++)
     {
      int temp;
      temp=p1;
      for(int i=1;i<=prpoi;i++)
      {int cou=0;
       while(temp%prnum[i]==0){temp/=prnum[i];cou++;}       
       pp1[i]=cou;         
          
      }  
      temp=p2;
      for(int i=1;i<=prpoi;i++)
      {int cou=0;
       while(temp%prnum[i]==0){temp/=prnum[i];cou++;}
       pp2[i]=cou; 
                 
      }  
      bool isin=true;
      
      for(int i=1;i<=prpoi;i++)testnum[i]+=pp1[i]-pp2[i];
/*      
      cout<<p2+1<<":"<<endl;
      for(int i=1;i<=prpoi;i++)cout<<testnum[i]<<" ";
      cout<<endl;
*/
      
      for(int i=1;i<=prpoi;i++)
       if(testnum[i]<nonum[i]){isin=false;break;}
      if(isin)
       {
           ans[0]++;
           ans[ans[0]]=j;
       }     
      p1--;
      p2++;
     }
     
//     cout<<endl;
     
     int poi;     
     if(n%2 && ans[ans[0]]==((n+1)/2))poi=ans[0]-1;else poi=ans[0];
     for(int i=poi;i>=1;i--)
     {ans[0]++;
      ans[ans[0]]=n+1-ans[i];
     }   
     
     cout<<ans[0]<<endl;
     for(int i=1;i<=ans[0];i++)cout<<ans[i]<<" ";
     cout<<endl;      
    
    
    }   
}


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