codeforces #262 DIV2 C題Present(二分+貪心),

來源:互聯網
上載者:User

codeforces #262 DIV2 C題Present(二分+貪心),

題目地址:http://codeforces.com/contest/460/problem/C

這個題是用二分枚舉最小值,然後判斷能否在規定的次數內使得所有的數都達到這個值。判斷的時候要用貪心的方法判斷,從左往右遍曆,這時候需要讓每次澆花的範圍盡量向右。所以當到達一個不得不澆花的地方時,要繼續佔用所需要的澆花次數。當澆花次數不夠用的時候,就說明無法達到。

在My Code中,c數組是記錄當前到了該點的時候澆花範圍的最右界,表示到了這個地方的時候少了多少次覆蓋。y就代表當前這個數被多少個澆花範圍覆蓋。x是指還剩餘的澆花次數。

忘了初始化。。二分很明顯不好調試。。調了將近20分鐘才發現忘了對C數組初始化。。。sad。。。。

代碼如下:

#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <algorithm>#include <queue>using namespace std;#define LL __int64LL a[110000], b[110000], c[110000];int main(){    LL n, m, i, w, ans, x, y;    scanf("%I64d%I64d%I64d",&n,&m,&w);    for(i=0;i<n;i++)    {        scanf("%I64d",&a[i]);    }    memset(c,0,sizeof(c));    LL low=1, high=1e10, mid;    while(low<=high)    {        mid=(high+low)/2;        //printf("%I64d\n",mid);        x=m;        y=0;        memset(c,0,sizeof(c));        int flag=0;        for(i=0;i<n;i++)        {            b[i]=mid-a[i];            if(b[i]<0)                b[i]=0;        }        for(i=0;i<n;i++)        {            y+=c[i];            b[i]-=y;            if(b[i]>0)            {                if(x-b[i]<0)                {                    flag=1;                    break;                }                else                {                    x-=b[i];                    y+=b[i];                    if(i+w<n)                    c[i+w]-=b[i];                }            }        }        //printf("%I64d   %d\n",mid, flag);        if(flag)        {            high=mid-1;        }        else        {            ans=mid;            low=mid+1;        }        //printf("%I64d\n",ans);    }    printf("%I64d\n",ans);    return 0;}



codeforces問題: codeforces比賽怎攻擊別人?

對某一題,首先你自己要先過TEST。然後回到比賽的PROBLEM列表,把這題後面的鎖鎖上(鎖上了就不能再提交了,所以沒把握就別鎖了),然後到ROOM裡面,你就可以看別人代碼了,下面有HACK按鈕,點一下,輸入你覺得他錯的範例。
 
codeforces上怎看測試資料

進入比賽,點MY SUBMISSIONS,然後再點#號下面的運行編號,就可以看到測試資料了
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.