ABC F 孩子 WA 疯了。
  • 板块题目总版
  • 楼主lnwhl
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/3/11 21:59
  • 上次更新2023/10/23 21:50:42
查看原帖
ABC F 孩子 WA 疯了。
451328
lnwhl楼主2023/3/11 21:59

ABC F,一直 WA 11,下大分。求调/kel。

#include <bits/stdc++.h>
#define int long long
#define il inline
#define pii pair<int,int> 
using namespace std;
int T,n;
il long double qp(int x,int y)
{
	long double res=1;
	for(;y;y>>=1,x=x*x)
		if(y&1)res=res*x;
	return res;
}
il long double check(int st,int x)
{
	int cnt=0;
	long double cur=0;
	while(st)
	{
		if(st%2==1)cur+=qp(x,cnt);
		st/=2;cnt++;
	} 
	return cur;
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--)
	{
		cin>>n;int ans=0;
		for(int b=2;b<=1000;++b)
		{
			int tmp=n,ok=1;
			while(tmp)
			{
				if(tmp%b>1)ok=0;
				tmp/=b;
			}
			if(ok)ans++;
		}
		for(int i=0;i<=(1<<7);++i)
		{
			int l=1,r=1e18+1;
			while(l<r)
			{
				int mid=(l+r)>>1;
				if(check(i,mid)>=n)r=mid;
				else l=mid+1;
			}
			if((abs(check(i,l)-n)<1e-6)&&(l>1000))ans++;
		}
		cout<<ans<<endl;
	} 
	return 0;
}

具体的思路是分类讨论 b1000b\le 1000b>1000b>1000,前者直接枚举,后者二分。实现比较劣。

2023/3/11 21:59
加载中...