Gym - 101170F - Free Weights (二分)

Posted kayiko

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym - 101170F - Free Weights (二分)相关的知识,希望对你有一定的参考价值。

题意:给你两行数据,代表每个哑铃的重量,让你移动哑铃使相同重量的哑铃再一起,求移动的哑铃中最大的哑铃重量。

思路:二分答案,check函数如果返回1,说明可能存在更小的重量,如果返回是0,说明比真实值大。

check函数里,遍历一遍数组,如果小于的等于mid的数,continual就行。如果第一次发现一个比mid大的数就记录一下,看看能不能找到一个与之匹配的哑铃,再找到相同重量的哑铃之前所遇到的哑铃,如果比mid值大说明此时的mid不成立,否则就继续找,如果找到就继续遍历,没有的话就return 0;

#include<bits/stdc++.h>
#include <cstdio>
#include<cstring>
#define debug(x) cout<<‘x‘<<‘ ‘<<x<<endl;
const int INF=0x3f3f3f3f;
typedef long long ll;
using namespace std;
const int maxn = 1e6+10;
typedef long long LL;
int a[2][maxn];
int n;
int check(int x)

    int top=0,id=0;
    for(int i=0;i<2;i++)
    
        for(int j=0;j<n;j++)
        
            if(a[i][j]<=x)continue;
            else
            
                if(!top)top=a[i][j];id=i;
                else if(top==a[i][j]&&id==i)top=0;id=0;continue;
                else return 0;
            
        
    
    return 1;

int main()

    scanf("%d",&n);
    int mi=INF,ma=-1;
    for(int j=0;j<2;j++)
    for(int i=0;i<n;i++)
    
        scanf("%d",&a[j][i]);
        mi=min(mi,a[j][i]);
        ma=max(ma,a[j][i]);
    
    //debug(1);
    //cout << mi << ‘ ‘ << ma << endl;
    int l=mi,r=ma,mid;
    while(l<=r)
    
        //cout<<1<<endl;
        mid=(l+r)/2;
        if(check(mid))r=mid-1;
        else l=mid+1;
    
    if(check(0))l=0;
    printf("%d\n",l);
    return 0;

 

以上是关于Gym - 101170F - Free Weights (二分)的主要内容,如果未能解决你的问题,请参考以下文章

NWERC 2016 F. Free Weights

android编程android:layout_weight="1"报错“Invalid layout param in a RelativeLayout: layout_weig

Gym101522A Gym101522C Gym101522D

Gym Gym 101147G 第二类斯特林数

OpenAI Gym 入门与提高 Gym环境构建与最简单的RL agent

强化学习 平台 openAI 的 gym 安装 (Ubuntu环境下如何安装Python的gym模块)