二分法

发布时间 2023-07-23 01:08:21作者: smiling&weeping

Smiling & Weeping

           ---- 从来都知道,那是我的月亮,月光也曾照亮爱慕她的人,自以为碰到了她,天亮了,才发现...

题目链接:Problem - E - Codeforces

说明:这是一道很简单的二分题目

思路:主要是在平方时很容易数据爆了,那么我们要好好思考一下如何处理题目给出的k,那我们可以确定w一定不会超过sqrt(k),那么好了,同时还有一个需要注意的点,就是上下左右都要加一个框,因此是(原有边长+2*mid)*(原有边长+2*mid)

对了,我的这种二分到最后l别忘了减一呦    (づ ̄3 ̄)づ╭❤~

Talk is cheap , show me your code ε=(´ο`*)))唉

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int t , n;
 5 int main()
 6 {
 7     scanf("%d",&t);
 8     while(t--)
 9     {
10         ll k;
11         scanf("%d",&n);
12         scanf("%lld",&k);
13         vector<ll> num(n+10);
14         for(int i = 1; i <= n; i++)
15             scanf("%lld",&num[i]);
16         ll l = 1 , r = sqrt(k);
17         while(l <= r)
18         {
19             ll temp = 0;
20             ll mid = l+r >> 1;
21             for(int i = 1; i <= n; i++)
22             {
23                 temp += (2*mid+num[i])*(2*mid+num[i]);
24                 if(temp < 0 || temp > k)
25                     break;
26             }
27             if(temp > k)
28                 r = mid-1;
29             else
30                 l = mid+1;
31         }
32         printf("%lld\n",--l);
33     }
34     return 0;
35 }

 

有人问我学不下去了怎么办?---那就看着别人实现你的梦想

不敢向喜欢的人表白?---总会有人向你喜欢的人表白的,敢不敢真心去勇敢是一回事,即使失败了,我又怎么会念念不忘呢...

本是青灯不归客,却因浊酒恋风尘

我们下次再见ヾ( ̄▽ ̄)Bye~Bye~