Binary Search

本文深入探讨了Mafia游戏中的算法实现,通过逆向思维和二分搜索技巧,解决了裁判人数与游戏局数的关系问题。文章详细介绍了如何利用C++进行高效编程,包括使用long long类型变量、内存初始化宏以及标准输入输出操作。

题目:

348A.Mafia 

tips:逆向思维,已知想玩的局数,则可推知最大当裁判的数量,裁判总数大于假定局数k,则k左移。因为要求临界值,所以二分(?);r是莽设的,非已知;注意r传过去时,要开ll. return l/r都行。

 1 #include<bits/stdc++.h>
 2 #define mem(a) memset(a,0,sizeof(a))
 3 #define ll long long
 4 #define inf 0x3f3f3f3f
 5 const int N=2e5+5;
 6 const int M=1e3+10;
 7 using namespace std;
 8 int mod=1e9+7;
 9 ll Mod=500;
10 ll n;
11 ll a[N],maxa=0,k;
12 ll binarys(ll l,ll r){
13    ll mid=1;
14    while(l<r){
15      mid=(l+r)>>1;
16    if(mid<maxa) {l=mid+1;continue;}
17    ll sum=0;
18    for(int i=1;i<=n;i++){
19       sum+=mid-a[i];
20    }
21    if(sum>=mid)
22      r=mid;
23    else l=mid+1;
24    }
25    return l;
26 }
27 int main()
28 {
29     cin>>n;
30     for(int i=1;i<=n;i++)
31     {
32         cin>>a[i];
33         maxa=max(maxa,a[i]);
34     }
35     k=10*maxa;
36     cout<<binarys(1,k)<<endl;
37     return 0;
38 }
Mafia

 

转载于:https://www.cnblogs.com/XXrll/p/11112160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值