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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

洛谷——P1031 均分纸牌

發(fā)布時(shí)間:2024/2/28 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷——P1031 均分纸牌 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

有NN堆紙牌,編號(hào)分別為?1,2,…,N1,2,…,N。每堆上有若干張,但紙牌總數(shù)必為NN的倍數(shù)??梢栽谌我欢焉先∪舾蓮埣埮?#xff0c;然后移動(dòng)。

移牌規(guī)則為:在編號(hào)為11堆上取的紙牌,只能移到編號(hào)為22的堆上;在編號(hào)為NN的堆上取的紙牌,只能移到編號(hào)為N-1N?1的堆上;其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。

現(xiàn)在要求找出一種移動(dòng)方法,用最少的移動(dòng)次數(shù)使每堆上紙牌數(shù)都一樣多。

例如N=4N=4,44堆紙牌數(shù)分別為:

①99②88③1717④66

移動(dòng)33次可達(dá)到目的:

從 ③ 取44張牌放到 ④ (9,8,13,109,8,13,10)-> 從 ③ 取33張牌放到 ②(9,11,10,109,11,10,10)-> 從 ② 取11張牌放到①(10,10,10,1010,10,10,10)。

輸入輸出格式

輸入格式:

?

兩行

第一行為:NN(NN?堆紙牌,1 \le N \le 1001≤N≤100)

第二行為:A_1,A_2, … ,A_nA1?,A2?,…,An??(NN堆紙牌,每堆紙牌初始數(shù),1 \le A_i \le 100001≤Ai?≤10000)

?

輸出格式:

?

一行:即所有堆均達(dá)到相等時(shí)的最少移動(dòng)次數(shù)。

?

輸入輸出樣例

輸入樣例#1:?復(fù)制

4 9 8 17 6

輸出樣例#1:?復(fù)制

3

?

我的又臭又長(zhǎng)的代碼,還不對(duì)!

#include<iostream> using namespace std;int n; //n堆紙牌 int a[100+10]; int num = 0, sum = 0,single = 0; //num移動(dòng)次數(shù),sum總牌數(shù),single每堆個(gè)數(shù)int main() {scanf("%d", &n);fill(a,a+n+1,-1);for(int i = 1; i <= n; i++){scanf("%d", &a[i]);sum += a[i];}single = sum / n;for(int i = 1; i <= n; i++) //每一個(gè)堆{if(i == 1 && a[i] < single){int cha_i = single - a[i];int j = i+1;num++;while(a[j] <= single && j <= n){j++;num++;}int cha_j = a[j] - single;if(cha_i < cha_j) a[j] -= cha_i;else a[j] -= cha_j;a[i] = single;}else if(i == n && a[i] < single){int cha_i = single - a[i];int j = i-1;num++;while(a[j] <= single && j >= 1){j--;num++;}int cha_j = a[j] - single;if(cha_i < cha_j) a[j] -= cha_i;else a[j] -= cha_j;a[i] = single;}else if(i != 0 && i != n && a[i] < single){int cha = single -a[i];int left = i - 1, right = i + 1; //左邊和右邊num++;int left_num = 1, right_num = 1;//左區(qū)間while(a[left] <= single && left >= 1){left--;left_num++;}//右區(qū)間while(a[right] <= single && right <= n){right++;right_num++;}//比較誰(shuí)近if(left_num < right_num && a[left] != single){int cha_l = a[left] - single;num += left_num;if(cha < cha_l) a[left] -= cha;else a[left] -= cha_l;a[i] = single;}else if(left_num > right_num && a[right] != single){int cha_r = a[right] - single;num += right_num;if(cha < cha_r) a[right] -= cha;else a[right] -= cha_r;a[i] = single;}}}printf("%d", num);return 0; }

?

別人的代碼:

作者:洛谷——?誰(shuí)懂誰(shuí)傷心

#include <iostream> using namespace std; int main() {int a,p=0,js=0;cin >>a;int q[a];for (int y=0; y<a; y++){cin >>q[y];p+=q[y];}p/=a;for (int y=0; y<a; y++)q[y]-=p;for (int y=0; y<a; y++){if (q[y]==0)continue;q[y+1]+=q[y];js++;}cout <<js;return 0; }

只能膜拜大佬的思路... 數(shù)學(xué)渣渣為什么跑來(lái)學(xué)計(jì)算機(jī)啊啊啊啊

一直做不懂模擬題...好氣啊啊啊啊啊啊

總結(jié)

以上是生活随笔為你收集整理的洛谷——P1031 均分纸牌的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。