首页新闻找找看学习计划

ACM求助!!!!!急

0
悬赏园豆:100 [待解决问题]

#include <stdio.h>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int i,j,t,n,m,k,a[100000],b[100000],sign;
while(scanf("%d",&n)!=EOF)
{k=0;
while(n--)
{k++;
t=0;
sign=0;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m;i++)
{
for(j=1;j*j<=a[i];j++)
{
if(a[i]%j==0)
{
if(a[i]/j==j) {b[t]=j;t++;}
else
{
b[t]=a[i]/j;
t++;
b[t]=j;
t++;
}
}
}
}
sort(b,b+t,cmp);
for(i=0;i<t-1;i++)
{
if(sign==1) continue;
if(b[i]==b[i+1])
{
printf("Case #%d: %d\n",k,b[i]);
sign=1;
}
}
}
}
return 0;
}

 

代码超时了 ,有没有谁给个优解啊!!!求求

l-m的主页 l-m | 初学一级 | 园豆:104
提问于:2015-04-25 20:06
< >
分享
所有回答(2)
0

来人啊

l-m | 园豆:104 (初学一级) | 2015-04-25 20:10
0

#include<cstdio>

#include<algorithm>

#include<cmath>

#include<cstring>

using namespace std;

#define maxn 100010

int vis[maxn];

int main()

{

int test, n, mark = 1;

scanf("%d", &test);

while(test--)

{

scanf("%d", &n);

memset(vis,0,sizeof(vis));

int t, Max = 0;

for(int i = 0; i < n; i++)

{

scanf("%d", &t);

Max = max(Max, t);

int lim = (int) sqrt((double)t);

for(int j = 1; j <= lim; j++) if(t % j == 0)

{

vis[j]++;

vis[t / j]++;

}

if(lim * lim == t)

{vis[t]--; }

printf("Case #%d: ", mark++);

for(int i = Max; i >= 1; i--)

{

if(vis[i] >= 2)

{ printf("%d\n",i); break;

}

}

return 0;

}

BugsTerminator | 园豆:199 (初学一级) | 2015-04-26 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册