codeforces Dytechlab Cup 2022B.(重写sqrt)

Problem - B - Codeforces

 Ela's Fitness and the Luxury Number

题意:每次给一个范围 l,r(包括端点),询问有多少数x满足 :x是根号下x向下取整的倍数。

举例子后规律很好发现,如图,每两个平方数之间有两个满足且一个在中间位置,一个在末尾位置。再考虑一下最右边r处少加的和最左边l处多加的就可以了

但但但是需要重写sqrt函数!sqrt的精度问题我也不明白唉。。。

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//二分重写sqrt 
ll Sqrt(ll x) {
  ll left=0, right=2000000123,ans;
  while (right>=left) {
      ll mid=(left+right)/2;
      
      if (mid*mid==x) return mid;
      else if(mid*mid<x)
      {
      	ans=mid;
      	left=mid+1;
	  }
	  else right=mid-1;
  }
  return ans;
}
int main()
{
	ll t;
	cin>>t;
	while(t--)
	{
		ll l,r,sum=0;
		cin>>l>>r;
		ll p1=Sqrt(l);
		ll p2=Sqrt(r);
		
		sum+=(p2-p1)*3;
		
		ll w=r-p2*p2;
		if(w>=p2*2)sum+=3;
		else if(w>=p2)sum+=2;
		else if(w<p2)sum++;
		
		ll m=l-p1*p1;
		if(m>p1)sum-=2;
		else if(m>0)sum--; 
		cout<<sum<<'\n';
		cout<<'\n';
	}
	return 0;
}
/*
13
185269712007480489 211089414899191762
290929188916147442 532980175995437570
510037871906132163 609475341264426289
77921270569329490 377318254283917957
102179692382381057 107842368999917160
168622873887768336 805846650264985923
166300058656117763 643000070774613905
17204883412407768 199986961700164323
419719455624892920 764477397110928360
217458036602729522 248152513875231743
149782798415801930 983044781675877903
63655960110563585 144283017902142025
37094196069343297 250571824609964003

87044995
572029176
199558979
1005355647
26214104
1461157386
1182221432
948094894
679459177
95475380
1813404962
382634151
923918885
*/

如果重写sqrt的有具体精度的:

double getSqrt(int x,double precision) {
	 double left = 0, right = x;
	 while (1) {
		 double mid = left + (right - left) / 2;
		 if (fabs(x /mid - mid) < precision)	return mid;
		 else if (x / mid > mid)	left = mid + 1;
		 else right = mid - 1;
	 }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,Codeforces Round 511 (Div. 1)是一个比赛的名称。然而,引用内容中没有提供与这个比赛相关的具体信息或问题。因此,我无法回答关于Codeforces Round 511 (Div. 1)的问题。如果您有关于这个比赛的具体问题,请提供更多的信息,我将尽力回答。 #### 引用[.reference_title] - *1* [Codeforces Round 860 (Div. 2)题解](https://blog.csdn.net/qq_60653991/article/details/129802687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Codeforces Round 867 (Div. 3)(A题到E题)](https://blog.csdn.net/wdgkd/article/details/130370975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Codeforces Round 872 (Div. 2)(前三道](https://blog.csdn.net/qq_68286180/article/details/130570952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值