终于给中文题了,感动中国
这道题我属于找规律类型,打个表,发现正解。据说很多人cin超时。
然而正解是考虑哪些位置的a[i]最终为1,最终为1说明此位置被反转了奇数次,即i有奇数个因子,而有且仅有完全平方数有奇数个因子,所以答案为sqrt(n)。小思维题,我还是弱了一点只会找规律。
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxl 100
long long n;
long long ans;
int a[maxl];
int main()
{
long long l,r,mid;
while(~scanf("%lld",&n))
{
l=1,r=sqrt(n);
while(l+1<r)
{
mid=(l+r)>>1;
if(mid*(long long)(mid+(long long)2)>n)
r=mid;
else
l=mid;
}
if(l*(l+2)>=n)
ans=l;
else
ans=l+1;
printf("%d\n",ans);
}
return 0;
}
本文探讨了一道算法题目,通过观察和分析找到了简洁的解决方法。问题的关键在于理解哪些位置的元素会被翻转奇数次,进而推导出答案与完全平方数之间的联系。
842

被折叠的 条评论
为什么被折叠?



