7月18日ブラシ半タイトルレコードには、答えを取得石のゲームをジャンプ

で:1

 

夏のプログラミングのトレーニングキャンプの明日不可解な幸せな友人〜

今日は二分回答の質問(作られた優れたハードアヒル

 

1049:B13-半分 - ジャンプ石ゲーム(二値の答え)

制限時間:5秒   メモリ制限:256メガバイトの
提出:30   解像度:12
[ 提出 ]、[ 状態 ]、[ ディスカッションボード ] [命題男:外部のインポート]

タイトル説明



サンプル入力

5 2 25 
2 
14 
11 
21 
17

サンプル出力

4

プロンプト


リファレンスチェック機能:

    ブールチェック(int型x)は、

    すべてのint = 0;
    IF(TOT> M)戻り0;
    int型最後= 0;
    以下のために(INT i = 1; iが<= N; iは++します)
        IF([I] -a [最終] <X)
        {
            ++へ。
            (TOT> m)がfalseを返す場合は、
        }
        他の最後= I;
    trueを返します。
}
/*
1049: B13-二分-跳石头游戏(二分答案)
时间限制: 5 Sec  内存限制: 256 MB
提交: 26  解决: 11
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述



样例输入

25 5 2
2
14
11
21
17


样例输出

4


提示

参考check函数:

bool check(int x)
{ 
    int tot=0;
    if(tot>m)return 0;
    int last=0;
    for(int i=1;i<=n;i++)
        if(a[i]-a[last]<x)
        {
            tot++;
            if(tot>m)return false;
        }
        else last=i;
    return true;
}

来源/分类
B13-二分 

[提交] [状态]
*/ 
#include<bits/stdc++.h>
using namespace std;
int L,n,m,a[50005];
bool check(int x)
{ 
    int tot=0;
    int last=0;
    for(int i=1;i<=n;i++)
        if(a[i]-a[last]<x)
            tot++;
        else last=i;
    if(tot>m)return false;
    return true;
}
int main(){
    cin>>L>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    a[n+1]=L;
    int l=0,r=L+1,ans;//那个+1 数据有些坑。。。
    while(l<r){
        
        int mid=(l+r)>>1;
    //    cout<<l<<" "<<r<<" "<<mid<<" "<<check(mid)<<endl;
        if(check(mid)){
            ans=mid;
            l=mid+1;
        }
        else
            r=mid;
        
    }
    cout<<ans;
    return 0;
}

启示:①要仔细读题和样例解释

②在调试代码的过程中如果一眼找不出错误来,当然也不知道程序运行过程中变量数值的变化情况 ,就可以在程序运行时打印变量值←好方法!

还是继续加油吧886         23:45 Program

 

おすすめ

転載: www.cnblogs.com/Tidoblogs/p/11210792.html