日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通(1320:【例6.2】均分纸牌(Noip2002))

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(1320:【例6.2】均分纸牌(Noip2002)) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1320:【例6.2】均分紙牌(Noip2002)


時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 12714 ??? 通過數: 6841

【題目描述】

有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)。

【輸入】

n(n?堆紙牌,1≤n≤100)

a1a2…an(n?堆紙牌,每堆紙牌初始數,l≤ai≤10000)。

【輸出】

所有堆均達到相等時的最少移動次數。

【輸入樣例】

4 9 8 17 6

【輸出樣例】

3

【分析】

? ? ? ? 如果你想到把每堆牌的張數減去平均張數,題目就變成移動正數,加到負數中,使大家都變成 0,那就意味著成功了—半。

? ? ? ? 拿例題來說,平均張數為 10,原張數 9,8,17,6,變為 -1,-2,7,-4,從左邊出發:要使第 1 堆的牌數 -1 變為 0,只需將 -1 張牌移到它的右邊(第 2 堆)-2 中;結果是 -1 變為 0,-2 變為 -3,各堆牌張數變為 0,-3, 7,-4;同理,繼續......

【參考代碼】

#include<stdio.h> int main() {int i,n,a[100],sum=0,count=0,avg;scanf("%d",&n);for(i=0;i<n;i++) //讀入各堆牌張數,求總張數sum{scanf("%d",&a[i]);sum+=a[i];}avg=sum/n;for(i=0;i<n;i++) //每堆牌的張數減去平均數a[i]-=avg;for(i=0;i<n-1;i++){if(a[i]!=0){count++;a[i+1]+=a[i];}}printf("%d\n",count);return 0; }

http://ybt.ssoier.cn:8088/problem_show.php?pid=1320

總結

以上是生活随笔為你收集整理的信息学奥赛一本通(1320:【例6.2】均分纸牌(Noip2002))的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。