• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            數據加載中……

            TJU_OI 1094 珍珠項鏈


            1094.  珍珠項鏈

            輸入文件名:necklace.in    
            輸出文件名:necklace.out
            提交  討論  運行狀況 

            有一串由n個珍珠組成的珍珠項鏈,珍珠的編號為1..n,每個珍珠都有各自的價值,我們用w[i]表示編號為i的珍珠的價值(注意:w[i]可以小于 零),已知這n個珍珠的價值量總和是n-1,現要求你在項鏈的某個位置斷開,使得斷開后的珍珠鏈滿足對于任意k,前k個珍珠的價值量總和不超過k-1. (對斷開的一點說明, 如果在位置p斷開, 那么得到的珍珠鏈將一定是p,p+1,...,n,1,2,...,p-1)

            輸入格式

            輸入文件的第一行有一個唯一的整數n,

            接下來n個用空格和換行符隔開的整數分別表示w[1],w[2],...,w[n]

            輸出格式

            如果無解請輸出一行"Impossible"(不含引號)否則輸出一個整數表示斷開后的珍珠鏈第一個珍珠的編號

            輸入樣例

            5
            1 1 1 1 0

            輸出樣例

            5

            數據規模與約定

            3≤n≤200,000 -1,000,000,000≤w[i]≤1,000,000,000

            40%的測試數據滿足n≤1,000

            題目來源OIBH 信息學練習賽 #8


            代碼:
             1 #include<iostream>
             2 using namespace std;
             3 const int MAXN=200000+100;
             4 long long n,w[MAXN<<1];
             5 int main()
             6 {
             7   freopen("necklace.in","r",stdin);
             8   freopen("necklace.out","w",stdout);
             9   cin >> n;
            10   for (int i=0;i<n;++i) cin >> w[i],w[i+n]=w[i];
            11   long long len=0,tot=0;;
            12   for (int i=0;i<n*2;++i)
            13     {
            14       if (tot+w[i]<=len) tot+=w[i],++len;
            15       else
            16     { tot=0; len=0; }
            17       if (len==n) { cout << i-len+2 << endl; return 0; }
            18     }
            19   cout << "Impossible\n";
            20   return 0;
            21 }
            22  
            23 
            基本上,就是枚舉珍珠,如果某個珍珠可以作為第一顆珍珠,那么接著把它的下一顆當作第二顆,如果合法,繼續下一顆,如果不合法,直接把當前不合法的這一顆的下一顆當作第一顆繼續枚舉.
            為什么擋當前的這顆珍珠在這個位置不行,就不用在別的位置嘗試呢?這是因為一旦某顆珍珠作為斷掉之后的鏈第k顆不合法的話,它也一定不可能在當作第1、第2........或第k-1顆時合法,略證如下:
            若A[1],A[2],A[3]......A[k-1] 作為前(k-1)顆珍珠合法................................................................................(1)
            而A[1]+A[2]+A[3]+......+A[k]>k-1   不合法...........................................................................................(2)
            那么我們有
            A[t+1]+A[t+1]+......+A[k]>k-1-(A[1]+A[2]+......+A[t])       (1<=t<k).............................................(3)
            (1)==> A[1]+A[2]+.......A[t]<=t-1
            所以由(3)知 A[t+1]+A[t+2]+......A[k]>k-1-(t-1)=k-t...........................................................................(4)
            而要想把A[t+1],A[t+2],.......A[k]當作第1,2,.........(k-t)顆珍珠且合法,必須有
            A[t+1]+A[t+2]+.......A[k]<=k-t-1  (有k-t顆珠子)..................................................................................(5)
            (4),(5)矛盾,所以紅色部分得證.

            posted on 2009-07-22 15:15 Chen Jiecao 閱讀(534) 評論(0)  編輯 收藏 引用 所屬分類: TJU_OI

            精品久久久久一区二区三区| 久久精品桃花综合| 久久午夜伦鲁片免费无码| 狠狠狠色丁香婷婷综合久久俺| 成人免费网站久久久| 久久精品成人一区二区三区| 无码人妻久久一区二区三区蜜桃 | 久久综合丝袜日本网| 久久精品一区二区三区中文字幕 | 日产精品99久久久久久| 九九99精品久久久久久| 亚洲国产综合久久天堂| 久久综合丁香激情久久| 久久亚洲AV无码精品色午夜麻豆| 97久久超碰国产精品2021| 久久亚洲日韩看片无码| 激情综合色综合久久综合| 精品国产一区二区三区久久久狼| 亚洲国产精品成人AV无码久久综合影院 | 精品国产乱码久久久久软件| 精品欧美一区二区三区久久久 | 久久九九久精品国产| 99999久久久久久亚洲| 久久久久亚洲AV无码观看| 久久亚洲av无码精品浪潮| 久久er国产精品免费观看2| 久久婷婷五月综合国产尤物app| 久久无码人妻精品一区二区三区 | 久久精品国产男包| 亚洲&#228;v永久无码精品天堂久久 | 久久精品国产男包| 久久精品亚洲福利| 久久久久国产精品三级网| 99久久国产亚洲高清观看2024 | 亚洲伊人久久大香线蕉苏妲己| 性色欲网站人妻丰满中文久久不卡| 思思久久99热免费精品6| 久久久网中文字幕| 香蕉99久久国产综合精品宅男自 | 精品综合久久久久久888蜜芽| 久久天天躁夜夜躁狠狠|