有好几个月没碰过cf了,还是一样的渣渣......
就连最水的前两题都做不出来,还被人hack了两次
又再次掉到灰了
惨不忍睹
代码都不会写了
我到底在干嘛
祭奠已经流逝的算法知识
不甘做一个菜鸟
那就努力码/
----------------------------------------------------------------
A.第一道都被人hack,还找不出原因,无语了,O__O "…反复读题都不觉得哪里有问题,实在找不出哪里错就去睡觉了,等到结束在看被人的代码。。。看别人的代码不明白为什么别人b不用/2,在看例子,也没数错啊~~~~尼玛在看题目中的Bulbasaur,傻逼了。。。。只能说智障
B.找出最大公约数不为1的最长数组,一开始筛选素数在暴力搜索,TLE了,后来直接对每个数因式分解统计每个因子的个数找出最大的即可。。方法是对的,但是细节没有处理好,又被人HACK了。。。
1.分解的边界应该是<=sqrt(a)而不是<sqrt(a)+1
2.统计最大值不应该算1的个数
3.当a/j=j时,统一j就行,不等需要统计a/j和j。一开始以为小的数肯定是最多的所以没有统计a/j,,看例子 2 5 5 4 15 25就知道,5是最多的。
--------------------
渣渣每次做出2道并且不被被人hack就满足,毕竟理想很丰满,现实很骨感
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
#define N 100005
char s[N];
int prime[N],isprime[N],a[N],m[N];
int main()
{
/*memset(prime,0,sizeof(prime));
int k=0;
for(int i=2; i<N; i++)
{
if(isprime[i]) continue;
else prime[k++]=i;
for(int j=i*2; j<N; j+=i)
isprime[j]=1;
}*/
int n,a;
while(cin>>n)
{
for(int i=0; i<N; i++) m[i]=0;
for(int i=0; i<n; i++)
{
cin>>a;
for(int j=1; j<sqrt(a)+1; j++)
{
if(a%j==0)
{
if(a/j==j)
{
m[j]++;
}
else
{
m[j]++;
m[a/j]++;
}
//cout<<j<<" "<<m[j]<<endl;
}
//cout<<m[2]<<endl;
}
}
int ma=1;
for(int i=2; i<N; i++)
{
ma=max(ma,m[i]);
//cout<<m[i]<<" ";
}
cout<<ma<<endl;
}
}