1. 程式人生 > >codeVS 1098 均分紙牌(2002年NOIP全國聯賽提高組)

codeVS 1098 均分紙牌(2002年NOIP全國聯賽提高組)

題目描述 Description

有 N 堆紙牌,編號分別為 1,2,…, N。每堆上有若干張,但紙牌總數必為 N 的倍數。可以在任一堆上取若於張紙牌,然後移動。
  移牌規則為:在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上;在編號為 N 的堆上取的紙牌,只能移到編號為 N-1 的堆上;其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。
  現在要求找出一種移動方法,用最少的移動次數使每堆上紙牌數都一樣多。

  例如 N=4,4 堆紙牌數分別為:
  ① 9 ② 8 ③ 17 ④ 6
  移動3次可達到目的:
  從 ③ 取 4 張牌放到 ④ (9 8 13 10) -> 從 ③ 取 3 張牌放到 ②(9 11 10 10)-> 從 ② 取 1 張牌放到①(10 10 10 10)。

輸入描述 Input Description

第一行N(N 堆紙牌,1 <= N <= 100)
第二行A1 A2 … An (N 堆紙牌,每堆紙牌初始數,l<= Ai <=10000)

輸出描述 Output Description

輸出至螢幕。格式為:
所有堆均達到相等時的最少移動次數。‘

樣例輸入 Sample Input

4
9 8 17 6

樣例輸出 Sample Output

3


解題思路

貪心策略。

從左至右逐個遍歷,大於平均數則把多的部分拿到下一項,小於平均數則把少的部分從下一項拿,數目正好的項不動,這樣可以得到儘量少的移動次數。

AC程式碼如下:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    int d[n], ans = 0;
    for( int i = 0; i < n; ++i ){
        cin>>d[i];
        ans += d[i];
    }

    ans /= n;
    int time = 0;
    for( int i = 0; i < n-1; ++i ){
        if( d[i] != ans ){
            d[i+1] += d[i]-ans;
            d[i] = ans;
            ++time;
        }
    }

    cout<<time<<endl;
    return 0;
}

相關推薦

codeVS 1098 均分紙牌(2002NOIP全國聯賽提高)

題目描述 Description 有 N 堆紙牌,編號分別為 1,2,…, N。每堆上有若干張,但紙牌總數必為 N 的倍數。可以在任一堆上取若於張紙牌,然後移動。   移牌規則為:在編號為

codevs 1014 裝箱問題 2001NOIP全國聯賽普及

bold 位數組 時有 n) 當前 一位數 數組 是否 一位 題目描述 Description 有一個箱子容量為V(正整數,0<=V<=20000),同時有n個物品(0<n<=30),每個物品有一個體積(正整數)。 要求n個物品中,任取若幹個裝入箱內,使箱子的剩

笨小猴 2008NOIP全國聯賽提高

++ 選擇 可能 ace pos while 並且 all put 題目描述 Description 笨小猴的詞匯量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的幾率非常大! 這種方法的具體描述如下:

cogs luogu 傳紙條 2008NOIP全國聯賽提高 WD

algorithm swe name bold inpu ace 包含 數據 stx 題目描述 Description 小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成一個m行n列的矩陣,而小淵和小軒被安排在矩陣對角線的兩

1058 合唱隊形 2004NOIP全國聯賽提高

memset 全部 string pro tor chorus input clu algorithm 題目描述 Description N位同學站成一排,音樂老師要請其中的(N-K)位同學出列,使得剩下的K位同學排成合唱隊形。 合唱隊形是指這樣的一種隊形

等價表達式 2005NOIP全國聯賽提高(棧模擬)

sca get har continue fin logs sta pre || P1054 等價表達式 題目描述 明明進了中學之後,學到了代數表達式。有一天,他碰到一個很麻煩的選擇題。這個題目的題幹中首先給出了一個代數表達式,然後列出了若幹選項,每個選項也是一個代數表

國王遊戲 2012NOIP全國聯賽提高(貪心+高精)

pre read 輸入輸出 style get 說明 include || -m P1080 國王遊戲 題目描述 恰逢 H 國國慶,國王邀請 n 位大臣來玩一個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下一個整數,國王自己也在左、右手上各寫一個整數。然後,讓這 n

雙棧排序 2008NOIP全國聯賽提高(二分圖染色)

push space style efault panel none ive hint slide 雙棧排序 2008年NOIP全國聯賽提高組 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 大師 M

CODE[VS] 1860 最大數 1998NOIP全國聯賽提高

body all 真的 題目 class namespace nbsp out tro 題目描述 Description   設有n個正整數(n≤20),將它們聯接成一排,組成一個最大的多位整數。 輸入描述 Input Description

聰明的質監員 2011NOIP全國聯賽提高

題目描述 Description 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是:見圖 若這批礦產的檢驗結果與所給標準值S 相差太多,就需要再去檢驗另一批

2010NOIP全國聯賽提高 T4 引水入城

題目中有圖片,建議大家去原處看圖之後再來看題解…… 題解: 看完題目後,首先想什麼情況下無解,那不如先假設第一排全部建設蓄水廠,然後搜尋一下有沒有城市喝不到水,這樣複雜度是O(地圖大小QAQ)的,500*500綽綽有餘(記憶化的前提下)。 for(in

CODE[VS] 天梯 1011 數的計算 2001NOIP全國聯賽普及

此程式碼用於以後方便複習使用,僅供參考。 數的計算 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 白銀 Silver 題解 檢視執行結果 題目描述 Description 我們要求找出具有下列性質數的個數(包含

codevs 1098 均分紙牌

題目描述 Description 有 N 堆紙牌,編號分別為 1,2,…, N。每堆上有若干張,但紙牌總數必為 N 的倍數。可以在任一堆上取若於張紙牌,然後移動。   移牌規則為:在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上;在編號為 N 的堆上取的紙牌,只能移到

codevs 1098 均分紙牌【貪心】

1098 均分紙牌   2002年NOIP全國聯賽提高組  時間限制: 1 s  空間限制: 128000 KB  題目等級 : 黃金 Gold 題解

1098 均分紙牌

default 輸出 sample head for 次數 end 相等 要求 題目描述 Description 有 N 堆紙牌,編號分別為 1,2,…, N。每堆上有若幹張,但紙牌總數必為 N 的倍數。可以在任一堆上取若於張紙牌,然後移動。  移牌規則為:在編號為 1

2018全國青少年資訊學奧林匹克聯賽提高複賽一試試題(一)——答案

/* 鋪設道路 輸入: 6 4 3 2 5 3 5 輸出: 9 */ #include<iostream> using namespace std; int main() { int n; cin>>n; int d[n]; for(int i=0;i<n

2017第23屆全國青少年資訊學奧林匹克競賽分割槽聯賽提高初賽題解報告

第二十三屆全國青少年資訊學奧林匹克競賽分割槽聯賽初賽提高組題解報告 山西現代雙語學校南校 劉鍇睿 選擇題 第一題:C [解析]NOIP政治題具體通知詳見NOI官網(雖然我看了那個通知,但我一個C++記那幹嘛) 第二題:B [解析]補

2017第23屆全國青少年資訊學奧林匹克競賽分割槽聯賽提高複賽題解報告

2017年第23屆全國青少年資訊學奧林匹克競賽分割槽聯賽複賽提高組題解報告 山西現代雙語學校南校 劉鍇睿 Day1 第一題:小凱的疑惑 這道題拿上以後,就很悶,十幾年的送分模擬題,成了數學題,考場上蒙B的我沒思路就先拿樣例手動模

牛客網noip賽前集訓 提高第4場 T2 區間 單調求解法,卡常

文章目錄 題意 $40$分做法. $90$分做法 滿分解法 非常簡單的一場了,然而我T1巧妙地寫萎把 l

NOIP機器翻譯(提高T1)————佇列,模擬

題解:本題主要考查佇列,模擬,用兩個陣列一個記錄單詞在不在記憶體中,一個做標記。用指標r指向隊首若記憶體滿了,刪除並指標右移。 程式碼如下: #include<iostream> using namespace std; int n,m,i,j,r=1,q=0,num=0;