1 #include<iostream> 2 #include<fstream> 3 #include<ctime> 4 using namespace std; 5 int main() 6 { 7 clock_t start= clock(); 8 ifstream in("makedata.txt"); 9 int i,j; 10 int n; in>>n; 11 __int64 *sum=new __int64[n+1]; 12 sum[0]=0; 13 for(i=1;i<=n;i++) 14 { 15 int temp; in>>temp; 16 sum[i]=sum[i-1]+temp; 17 } 18 int k; in>>k; 19 int len=0; 20 for(i=0;i<n;i++) 21 { 22 for(j=n;j>i+len;j--) 23 if((sum[j]-sum[i])%k==0) 24 { 25 if((j-i)>len) 26 len=j-i; 27 break; 28 } 29 if(len>=(n-i-1)) 30 break; 31 } 32 cout<<len<<endl; 33 clock_t end=clock(); 34 cout<<"Running Time: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl; 35 return 0; 36 }
注释版:
1 #include<iostream> 2 #include<fstream> 3 #include<ctime> 4 using namespace std; 5 int main() 6 { 7 //测试运行时间:开始计时 8 //clock_t start= clock(); 9 ifstream in("makedata.txt"); 10 int i,j; 11 //数据数目 12 int n; in>>n; 13 //长整型的定义与输出与平台有关,不同平台重新修改定义即可 14 __int64 *sum=new __int64[n+1]; 15 //为便于处理,设置一个sum[0] 16 sum[0]=0; 17 //sum[i]为第1个到第i个数据的累加和 18 for(i=1;i<=n;i++) 19 { 20 int temp; in>>temp; 21 sum[i]=sum[i-1]+temp; 22 } 23 int k; in>>k; 24 int len=0; 25 for(i=0;i<n;i++) 26 { 27 for(j=n;j>i+len;j--) 28 if((sum[j]-sum[i])%k==0) 29 { 30 if((j-i)>len) 31 len=j-i;//更新最大子串长度 32 break; 33 } 34 if(len>=(n-i-1)) 35 break; 36 } 37 cout<<len<<endl; 38 //测试运行时间:结束计时 39 //clock_t end=clock(); 40 //输出运行时间 41 //cout<<"Running Time: "<<(double)(end-start)/CLOCKS_PER_SEC<<endl; 42 return 0; 43 }